经典ASP将对象传递到VB6 COM dll方法-类型不匹配

经典ASP将对象传递到VB6 COM dll方法-类型不匹配,com,asp-classic,marshalling,Com,Asp Classic,Marshalling,这是我在我的时代遇到的一个更奇怪的问题,最好用经典ASP中的一个例子来解释它: 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

这是我在我的时代遇到的一个更奇怪的问题,最好用经典ASP中的一个例子来解释它:

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")

当它不起作用时,我得到了一个类型不匹配,我非常困惑,老实说,我不知道从哪里开始。任何指针人?

经典VB可能会希望使用工具的参数。方法是VTyByReF类型的变体,也许您的C++ COM实例被作为VTSRayDebug或VTSUnLee而传递,但是,当您首先将其存储在会话中时,它会转换为VT_BYREF。

方法param不是BYREF,但我认为您认为从会话中传递它可能会修改对象在vtable类型方面的表示方式,这一想法值得研究。谢谢VB6 COM dll方法没有定义ByVal或ByRef(默认情况下它不使用ByVal吗?),当我将其更改为ByVal时,它使用的是会话或本地定义的变量!感谢YMS的建议,我想知道是否有办法跟踪参数类型(只是出于兴趣)。我认为VB默认情况下希望COM对象和字符串(VT_BSTR)为ByRef,尽管我找不到一个引用来确认此语句。要跟踪参数类型,可以尝试(vbscript)函数,但我不确定它是否在asp中可用,或者VT_BYREF的行为会是什么