SafeArray问题,如果你会一点,为何不帮我一点,谢谢了!(50分)

  • 主题发起人 主题发起人 guan1573
  • 开始时间 开始时间
G

guan1573

Unregistered / Unconfirmed
GUEST, unregistred user!
我用delphi做cad的二次开发,要用到许多cad的接口函数
比如:
function AddLine(startPoint: PSafeArray; endPoint: PSafeArray): IDispatch; safecall;
既:AddLine函数,可我不知怎样付给其startPoint: PSafeArray变量,也就是说我
不会用PSafeArray变量!!!
高手帮帮我吧!!
 
CAD二次开发?
我也想知道.
 
高手帮帮忙啊!!!
 
钱少是不是,如果回答出来,我在另给100分
好商量吗
别见死不救啊!!!兄弟,
 
为什么不用objectarx2000对cad二次开发?
 
其实我也很想代替arx用delphi对cad二次开发,可手边资料太少
不只Function AddLine()是什么函数,老兄有没有相关资料
大家经常交流一下,我现在正在做cad二次开发方面的工作
 
你这样试试:
先定义一个PSafeArray的变量,如 psa : PSafeArray;
然后再输入psa.,等一会儿,Delphi会弹出一个对话框,你看看是什么内容。
 
应该是类似以下的方式:
var
Params : PSafeArray;
v : Variant;
begin
v := VarArrayCreate([0, 0], varVariant);
v[0] := Edit1.Text;
Params := PSafeArray(TVarData(v).VArray);
...
 
谢谢各位:
我的问题已经解决,虽然函数明确要: PSafeArray变量,我也是采用教父
的方法,实际运行时提示是:变量类型不合适,我有参考别的,发现用以下形式付变量
即可:
var
ss,ss1:olevariant;
begin
ss:= VarArrayCreate ([0,2],VT_R8);
ss1:= VarArrayCreate ([0,2],VT_R8);
ss[0]:=100;ss[0]:=100;ss[0]:=0;
ss1[0]:=100;ss1[0]:=200;ss1[0]:=0;
acad_document.AddLine(ss,ss1);//即可在cad中画一条直线
分我是要给的,我先不结束此问题:
1)我用delphi做cad开发,小有一点收获,我的项目已经完成,如果
我这点小的收获,能帮你一把,我也很高兴。有什么问题,就来吧!!
我会的,我不会的,咱一起探讨。
2)关于PSafeArray,我不会,好像比较难控制,msdn关于此变量的介绍挺多,
有谁对此比较熟悉,或者有何见解,欢迎来讨论。
我在此恭候大家!!!
 
呵呵,前两天我回答了一个人问的safearray的用法
代码懒得再贴一遍了,你自己找找吧
 
hubdog:
你回答的问题我实在找不到,你回答的问题太多了,
 
SafeArray的使用非常麻烦,下面是写过的一段为ScriptControl添加自定义函数并调用的代码
,就用到了SafeArray
procedure TForm1.Button1Click(Sender: TObject);
var
n:Integer;
Parameters:PSafeArray;
bound:TSAFEARRAYBOUND;
Index:integer;
v:Variant;
begin
//
try
n:=StrToInt(inputbox('demo','请输入要计算阶乘的数',''));
except
ShowMessage('输入有误,必须输入数字,请重新运行');
Exit;
end;
ScriptControl1.Reset;
ScriptControl1.Language:='JScript';
//添加阶乘函数
scriptcontrol1.addCode('function factorial(num){'+
'result=1;for(ix=1;ix<=num;ix++){'+
'result = result*ix;};return result;};');
//参数为一维有一个元素的SafeArray
bound.lLbound:=0;
bound.cElements:=1;
try
Parameters := SafeArrayCreate(VT_VARIANT, 1, bound);
except
ShowMessage('分配内存错误');
Exit;
end;
//因为SafeArrayPutElement的第二个参数定义为const类型,
//所以index必须定义为变量并赋值才能被调用
V:=n;
Index:=0;
SafeArrayPutElement(Parameters,Index,V);
try
ShowMessage(ScriptControl1.Run('factorial',Parameters));
finally
SafeArrayDestroy(Parameters);
end;
end;

 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
661
import
I
后退
顶部