三百分求代码,COM传递带STRING的RECORD。(300分)

  • 主题发起人 主题发起人 歪就歪
  • 开始时间 开始时间

歪就歪

Unregistered / Unconfirmed
GUEST, unregistred user!
抱歉,我把下面的问题重复再问:
做了一个COM,是Out-Proc Server,在其中定义了一个Record
TWorkData Record
Size : Integer;
Heigh : Integer;
Name : WideString;
//或BSTR
end
在method里,GetData: TWorkData;
和SetData(D: TWorkData)
但,RECORD里,NAME(即STRING)不能传递,否则出RUNTIME错误。
三百分,DELPHI5+WIN98,我在两天内必须解决这问题,我的老板
等着呢。
 
试试把workdata通通封装到variant里的方法
procedure VariantToWorkdata(VData:Variant;var Workdata:TWorkdata);
begin
workdata.size:=VData[0];
workdata.height:=vdata[1];
workdata.name:=vdata[2];
end;
procedure WorkdataToVariant(Workdata:TWorkdata;var VData:variant);
begin
vData:=VarArrayCreate([0, 2], varVariant);
vdata[0]:=workdata.size;
vdata[1]:=workdata.height;
vdata[2]:=workdata.name;
end;

我没试验,随便写的
 
HUBDOG:
谢谢,IT' WORK!
我妻子在一边对你评价说:“赶紧让他去美国吧,这么棒的水平,别
在中国做奉献了。”
 
HUBDOG:哦,忘了,能否麻烦你帮我再看看这个问题:
对于一个Out Proc Server, 比如:ComPrj.exe, 里面有ComIntf.pas,
Unit1.pas, ComPrj_TLB,在COM里可以用CALLBACK的方法,触发CLIENT端
的事件(EVENT),比如,当COM中的一个变量:Text改变了,就触发CLIENT
端:OnTextChange。这我知道能够实现。
但,如果是COM外,在Unit1里,有个ButtonClick,在Client
端的程序如何接到这事件?
你明白我的意思么?这问题与你刚答的上面问题都在:
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=239304
当然,歪就歪都这份了,你要多少分,我给你加多少分就是了,呜……
 
我没太弄懂你的意思,不过我不知道你试没试过
IConnectionPoint接口
 
对了,variant用完可能需要清除
procedure VariantToWorkdata(VData:Variant;var Workdata:TWorkdata);
begin
workdata.size:=VData[0];
workdata.height:=vdata[1];
workdata.name:=vdata[2];
varclear(vdata);
end;
 
后退
顶部