【发布时间】:2011-10-09 11:11:26
【问题描述】:
这是我在我这个时代遇到的最奇怪的问题之一,最好用 Classic 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")
当它不起作用时,我得到一个类型不匹配,我很困惑,老实说不知道从哪里开始。有没有人指点一下?
【问题讨论】:
-
方法参数不是byref,但我认为您认为从会话中传递它可以修改对象在vtable类型方面的表示方式的想法必须值得研究。谢谢!
-
VB6 COM dll 方法没有定义 ByVal 或 ByRef(默认情况下它不使用 ByVal 吗?),当我将其更改为 ByVal 时,它可以使用会话或本地定义的变量!感谢YMS的建议,不知道有没有办法追踪参数类型(只是出于兴趣)
-
我认为 VB 期望 COM 对象和字符串 (VT_BSTR) 默认为 ByRef,尽管我找不到确认此声明的参考。
-
要跟踪参数类型,您可以尝试 (vbscript) 函数VarType,但我不确定它是否在 asp 中可用,或者他的行为对于 VT_BYREF 会有什么影响
标签: com asp-classic marshalling