热情软件屋

 

VC写了个COM组件,但在VB中调用时提示Z类型不匹配


编号:QA003932
建立日期: 2001年2月27日 最后修改日期:2003年8月2日
所属类别:

小斌:
    操作系统: 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类型不匹配,请问专家是怎么回事?怎么解决?谢谢!
    水平: 高手

回答:

    把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

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio