我用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中該如何定義
uj5u.com熱心網友回復:
定義成long型回呼函式代碼要放在模塊里不能放在表單里 實參用函式名前加AddressOf限定
uj5u.com熱心網友回復:
大俠能給個代碼例子不,本人vb水平一般uj5u.com熱心網友回復:
另外,我這個是加載的com 不是dll,函式還需要重新定義嗎uj5u.com熱心網友回復:
這個我也說不好,com介面不知道會不會被VB標記成unknow,如果那樣的話可能就搞不定了,安全一點的話定義成long型的VB下的話,應該和dll一樣, Call myobject.myfunction a,b,c,..., AddressOf MyCallBackFun
MyCallBackFun要定義在模塊檔案里
uj5u.com熱心網友回復:
還有,如果你com組件是自己做的話,我覺得做成事件會更好些,callback畢竟不符合VB的風格你在VB選單"工程">>"參考"下邊可以找到自己的com組件,選中
然后你可以在表單中宣告一個 Private WithEvents myobject As BIZCOM.ENTRFUNC
這樣你就可以選到組件中的事件了.
uj5u.com熱心網友回復:
Dim myobject As Object要是這樣放在模塊里面定義也不行。
addressof要的是函式、程序,你傳遞一個物件指標過去也不對呀
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/123923.html
