【问题标题】:Classic ASP passing object into VB6 COM dll method - Type Mismatch经典 ASP 将对象传递到 VB6 COM dll 方法 - 类型不匹配
【发布时间】: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


【解决方案1】:

经典VB可能期望tool.Method的参数是VT_BYREF类型的变体,也许你的C++ COM实例被传递为VT_DISPATCH或VT_UNKNOWN,但是当你首先将它存储在会话中时它被转换为VT_BYREF .

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-12
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 2010-11-14
    • 2012-01-19
    • 2011-09-18
    相关资源
    最近更新 更多