VC写了个COM组件,但在VB中调用时提示Z类型不匹配
编号:QA003932
建立日期: 2001年2月27日 最后修改日期:2003年8月2日
所属类别:
Q
小斌:
操作系统: Windows
编程工具: VC 和 VB
问题: 我在VC中用ATL写了一个COM组件,它只提供一个方法:MyThod(int x,int y,int* z),该组件在用VC写的客户机调试通过,但在VB中调用时:
dim z as integer
objMyvcdemo.MyThod 1, 7, Z
其中objMyvcdemo为组件的实例对象。
总是提示Z类型不匹配,请问专家是怎么回事?怎么解决?谢谢!
水平: 高手
A回答:
把z定义为Long型试一下。
小斌问:
非常谢谢你能这么快为我解答我提出的问题!我按照你所说的将z改为long型果然通过了!我想再请你给我说一下为什么设成long就能代替int *,难道long在vb里是当指针用的吗?谢谢!
答:
其实VC中的int型是32位的,相当于VB的long,而VB中的integer型是16位的,相当于VC的short型。如果使用传值方式传递,如你定义的x、y,那么在VB采用什么类型往往不重要,因为VB会自行转换,只有它无法转换时才会报错。但是如果采用传址方式(即指针),则类型必须完全一致,否则VB就报告错误。这就是为什么要求你把z定义为Long型。
sangjinrui问:关于这方面的问题也一直困扰者我,因为假定一个程序员使用VC++编写了一个COM服务器,而另一个程序员用VB或Delphi之类的语言编写其客户时,得到服务器接口后,如何保证调用接口函数时,传递的参数是正确的(起码是可以转换的)?
答:COM接口优于DLL等接口的一点就是它自身带着对接口数据类型的说明。在调用时,系统会自动检查参数类型是否正确,如果不正确会报告错误。在VB中,如果你想看一个接口的参数类型,可以在“工程|引用”菜单中加入COM库,然后在对象浏览器中查看。
此问题由李海回答。
附加关键字:编程, 源程序, programming, source code, C/C++, MFC, C++ Builder, Borland C++, Turbo C, C, BCB, Visual Basic, VB, ActiveX技术, activex, com, ado。
| |
|
|
| |
|
|