感觉很难的问题!没有人知道? (100分)

  • 主题发起人 主题发起人 vf
  • 开始时间 开始时间
V

vf

Unregistered / Unconfirmed
GUEST, unregistred user!
有关Com组件的问题

创建了一个ActiveX Library然后加入了一个Automation Object其CoClassName为TAM
加了一个方法,显示一个界面。通过regsvr32注册。

用以下方法调用
procedure TForm1.Button1Click(Sender: TObject);
var
xx:variant;
begin
CoInitialize(nil);
xx:=CreateOleObject('TAM'); //这里有错误提示,CoInitialize没有调用
xx.M1;
end;
能不能用以上方法调用?如果能用该怎么样正解调用?
 
富翁呢?都回家过年了吗?..........................................
 
如果分不够,我可以全给,就400分了
 
静的让人害怕啊
真的没有了解这方面的?还是不屑回答?
 
推荐一本什么书,也可以
 
我也想知道。。。。。
 
CoInitialize(nil);
应该在你的com中调用吧?
具体我也没有做过,没法帮你
 
调用很简单。先把你的LIB文件uses进来
procedure TForm1.Button1Click(Sender: TObject);
var
xx:ITAM;
begin
xx:=CoTAM.create;
xx.M1;
end;
 
不应该啊,相知道为什么
 
不必调用CoInitialize(nil); 那是服务器的事。
似乎是类名不对,详细可以看看《DELPHI 5开发人员指南》的第23章。
 
小神通:
你说的方式,我知道。今天偶尔看了下Object Pascle语言参考手册,里面有一章节
讲Automation对象接口调用的问题:(原文)如果一个对象所属的的类实现IDispathch
接口类型的内容,则为Automaiton对象。Automation对象方法的调用方式:ComObj单元里
定义的CreateOleObject函数。
如果var Word variant;
begin
Word:=CreateOlObject('Word.Basic');
................
end;
ITAM = interface(IDispatch)
['{95D4CAC1-EB19-4593-9A01-F9D34E45DB33}']
是不是也是一个Automation对象呢?不是不也可用CreateOleObject来创建一个对象来使用呢?
 
好像应该带上dll的文件名
xx:=CreateOleObject('dllfilename.TAM');
 
还有,使用Use *_Tlb.pas方式,在设计期间可以,
但是在运行期间如果调用一个Com接口呢?如果调用一个新的Com组件还需要,修改原程序吗?
 
给分吧

test := CreateOleObject('Project1.TAM');
就对了
 
Project1.TAM 你可以在注册表里找到
里面有 CLS_ID
 
CoInitialize(nil);写在initialization里面
 
:yanyandt2,
test := CreateOleObject('Project1.TAM');
你验证过了吗?你用的Delphi几?


 
接口不变就行了,接口的优点就是不关心实现
 
后退
顶部