2011-07-20 80 views
2

這是我所面臨的我的時間更離奇的問題之一,它的最佳像許多問題在傳統的ASP爲例進行說明:經典ASP傳遞對象到VB6 COM DLL的方法 - 類型不匹配

Set thing = Server.CreateObject("ClassName") ' a C++ COM dll class 
Set tool = Server.CreateObject("OtherClassName") ' a VB6 COM dll class 

這不起作用

tool.Method thing 

這確實工作

Set session("thing") = thing 
tool.Method session("thing") 

當它不工作,我收到了TY pe mismatch,我非常困惑,不知道從哪開始說實話。任何指針的人?

+0

該方法的參數不是一個byref,但我認爲你的想法,從會議傳遞它可以修改如何表示對象的vtable類型方面值得研究。謝謝! –

+0

VB6 COM dll方法未定義ByVal或ByRef(默認情況下不使用ByVal?),當我將其更改爲ByVal時,它可以與會話或本地定義的變量一起使用!感謝YMS的建議,我不知道是否有一種方法來跟蹤參數類型(只是出於興趣) –

+0

我認爲VB默認COM對象和字符串(VT_BSTR)是ByRef,雖然我找不到引用確認此聲明。 – yms

回答

2

經典VB可能會預期tool.Method的參數是類型爲VT_BYREF的變體,也許您的C++ COM實例已作爲VT_DISPATCH或VT_UNKNOWN傳遞,但是在將其存儲在會話中時它會轉換爲VT_BYREF第一。