2011-07-20 73 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第一。