我用vb加载一个c++编写的com文件,现在有一个函数需要传入回调接口的指针,老是报类型不匹配。请高手帮忙看看,com idl的定义如下:
library BIZCOMLib
{
importlib("stdole32.tlb");
importlib("stdole2.tlb"); [
uuid(715F4705-D954-4942-AF67-A480D356ACBA),
helpstring("ENTRFUNC Class")
]
coclass ENTRFUNC
{
[default] interface IENTRFUNC;
[source, default] interface ICallBack;
调用函数:
[id(4), helpstring("method ENTRFUNC_Init")] HRESULT ENTRFUNC_Init([in] VARIANT use_ssl, [in] VARIANT start_conn, [in] ICallBack *pCallBack, [in] VARIANT *parg);
vb调用方法:
Private Sub CommandButton2_Click()
Dim myobject As Object
Set myobject = Nothing
Set myobject = CreateObject("BIZCOM.ENTRFUNC")
Call myobject.ENTRFUNC_TASInit(1)
Call myobject.ENTRFUNC_Init(0, 1, myobject, 0)
End Sub 其中 ICallBack *pCallBack在vb中该如何定义

解决方案 »

  1.   

    定义成long型 
    回调函数代码要放在模块里不能放在窗体里 实参用函数名前加AddressOf限定
      

  2.   

    另外,我这个是加载的com 不是dll,函数还需要重新定义吗
      

  3.   

    这个我也说不好,com接口不知道会不会被VB标记成unknow,如果那样的话可能就搞不定了,安全一点的话定义成long型的
    VB下的话,应该和dll一样, Call myobject.myfunction a,b,c,..., AddressOf MyCallBackFunMyCallBackFun要定义在模块文件里
      

  4.   

    还有,如果你com组件是自己做的话,我觉得做成事件会更好些,callback毕竟不符合VB的风格
    你在VB菜单"工程">>"引用"下边可以找到自己的com组件,选中
    然后你可以在窗体中声明一个 Private WithEvents myobject As BIZCOM.ENTRFUNC
    这样你就可以选到组件中的事件了.
      

  5.   

    Dim myobject As Object
    要是这样放在模块里面定义也不行。
    addressof要的是函数、过程,你传递一个对象指针过去也不对呀