VFP无法传递参数给含varant类型的COM函数参数,请高手帮忙解答!
用VFP通过COM调用autocad,其中调用到autocad 的函数,参数为varant类型,VFP无法传递参数给autocad的函数,提示错误,这个如何处理啊或变通啊?请高手帮忙解答!CLEA
oleapp=Createobject("autocad.application") && 启动autocad
oleapp.Visible=.T. && 显示autocad
ThisDrawing=oleapp.activedocument
Dime startPt(3) As Double
dime endPt(3) As Double
startPt(1) = 1
startPt(2) = 1
startPt(3) = 0
endPt(1) = 5
endPt(2) = 5
endPt(3) = 0
lineObj = ThisDrawing.ModelSpace.AddLine(@startPt,@endPt) &&画一根线
* oleapp.ZoomAll
* 下面代码是为这根线增加一个属性
Dime xdataType(2) as Integer
Dime strdata(2) As Variant
* ' 为每个数组定义值
* '1001 指示 appName
xdataType(1) = 1001
strdata(1) = "MY_APP"
* '1000 指示字符串值
xdataType(2) = 1000
strdata(2) = "Thisissomexdata"
=COMARRAY(oleapp,0) &&数组是基于零的数组,并且按值传递
lineObj.SetXData(@xDataType,@strdata) &&为线对象增加属性 ------------------这里出错了!
retu
SetXData函数帮助文件中的说明:
说明:Sets the extended data (XData) associated with an object.
object.SetXData XDataType, XData
Object
All Drawing Objects , AttributeReference, Block, Dictionary, DimStyle, Group, Layer, Linetype, PlotConfigurations, RegisteredApplication, TextStyle, UCS, View, Viewport; XRecord
The object this method applies to.
XDataType
Variant (array of short); input-only
XData
Array of Variant; input-only
Remarks
Extended data is an example of instance-specific data created by applications written with ObjectARX or AutoLISP. This data can be added to any entity. This data follows the entity's definition data and is maintained in the order in which it was saved into the document. (AutoCAD maintains this information but doesn't use it.)
这是一个帮助文件上的例子:
Sub Example_SetXdata()
' This example creates a line and attaches extended data to that line.
' Create the line
Dim lineObj As AcadLine
Dim startPt(0 To 2) As Double, endPt(0 To 2) As Double
startPt(0) = 1#: startPt(1) = 1#: startPt(2) = 0#
endPt(0) = 5#: endPt(1) = 5#: endPt(2) = 0#
Set lineObj = ThisDrawing.ModelSpace.AddLine(startPt, endPt)
ZoomAll
' Initialize all the xdata values. Note that first data in the list should be
' application name and first datatype code should be 1001
Dim DataType(0 To 9) As Integer
Dim Data(0 To 9) As Variant
Dim reals3(0 To 2) As Double
Dim worldPos(0 To 2) As Double
DataType(0) = 1001: Data(0) = "Test_Application"
DataType(1) = 1000: Data(1) = "This is a test for xdata"
DataType(2) = 1003: Data(2) = "0" ' layer
DataType(3) = 1040: Data(3) = 1.23479137438413E+40 ' real
DataType(4) = 1041: Data(4) = 1237324938 ' distance
DataType(5) = 1070: Data(5) = 32767 ' 16 bit Integer
DataType(6) = 1071: Data(6) = 32767 ' 32 bit Integer
DataType(7) = 1042: Data(7) = 10 ' scaleFactor
reals3(0) = -2.95: reals3(1) = 100: reals3(2) = -20
DataType(8) = 1010: Data(8) = reals3 ' real
worldPos(0) = 4: worldPos(1) = 400.99999999: worldPos(2) = 2.798989
DataType(9) = 1011: Data(9) = worldPos ' world space position
' Attach the xdata to the line
lineObj.SetXData DataType, Data
' Return the xdata for the line
Dim xdataOut As Variant
Dim xtypeOut As Variant
lineObj.GetXData "", xtypeOut, xdataOut
End Sub
[此贴子已经被作者于2018-7-5 12:48编辑过]