COM/COM+中的参数传递及参数类型的问题(200分)(200分)

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

vastyellow

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟正学习COM/COM+,对于它的方法的参数传递和类型,一直很模糊,希望大师指点一二
 
vastyellow:
你问的有些含糊。所以回答起来也不知如何说起。COM/COM+的参数传递是由规定的。
不同于c/c++中的参数传递,与Delphi程序的参数传递有些类似(比如字符串)。
举例:整数--sysint
字符串--widestring
variant--olevariant
这样定义了之后,就可以对COM/COM+规范的二进制代码兼容提供支持。这些属于COM规范
所要解决的问题。可以参照MS 的 Inside Com
在Delphi环境下可以自己创建一个COM对象,然后再类型库编辑器中添加参数,仔细看看
那些类型就应该基本了解
另:个人看法。仔细看看Borland对COM封装的源代码,总觉得与MS文档中所说的内容有些
距离。但Delphi写出的COM程序工作的很好。
 
比如说,我要在COM的方法中传入一个对象变量,传回一个字符串,然后用asp调用COM的方法,
取回字符串,但返回的字符串为空,不知为什么?
还有com中,类型库中添加方法时总是过程,如何加入函数方法?还请指点一二!
 
在类型库中设置参数输出类型定为[out,retval]就可以啦
 
csdn上面有大把文章,先看一些基础的东西吧。
 
对象变量可能最好用olevariant传递,但是olevariant<-->objects之间的转换
需要仔细处理(因为Delphi的object与VB/ASP中的对象的结构有所不同)。
参数的返回可以依照jswqg的方法处理。在类型库编辑器中指定一个参数是out/out+retval
不存在不能定义成function的问题。如果定义为procedure需要返回参数可以这样
procedure GetAspStrA(aVariant: OleVariant;
out strReturn: WideString);safecall;
如果定义为function需要返回参数可以这样
function GetAspStr(aVariant: OleVariant): WideString;
safecall;
在procedure中定义需要返回的参数为 out 类型,这样的参数返回式VC/WinAPI的风格
在function中定义需要返回的参数为out+retval类型
BTW:创建ASP/VB等可以调用的COM最好 new-activex-automation object 然后
选定generate event support code 选项
 
我在用BCB5做多层结构系统时,我在Server端加入了一个取得服务器IP地址的方法:GetServerIP它的参数是vIP:Variant *,IN方式,并在服务端实现了这个方法,
加入的代码如下:
*vIP="192.168.0.01";最后我注册成功。
可是在我开发客户端程序时,我用TSocketConnection
当取得它的服务时我是这样做的:
Variant* vip;
SocketConnection1->AppServer.GetServerIP(vip);
Edit1->Tex=vip;
可 是我在运行程序时出错,没有编译通过。
它说getserverIP不是variant的成员
getserverIP is not a memober of variant
请问?
我该如何去调用这个方法呢?
请各位大侠多多指教?
小生的QQ:65466700(24小时在线恭候)
MAIL: alongsun@sina.com
 
多人接受答案了。
 

Similar threads

回复
0
查看
978
不得闲
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
后退
顶部