【问题标题】:Debug & Release version of OCX incompatible "Variable uses an Automation type not supported in Visual Basic"OSX 的调试和发布版本不兼容“变量使用 Visual Basic 不支持的自动化类型”
【发布时间】:2018-08-31 04:17:07
【问题描述】:

我有一个内置于 VS2010 的旧版 OCX 控件,并在 VB6 ActiveX EXE 中使用。当我注册 OCX 的调试版本并尝试使用 VB6 构建它时,我收到错误

如果我注册了 Release 版本,那么 VB ActiveX EXE 容器就会编译并运行。我已经在线搜索了这个错误,但结果不是很丰富。目前还不清楚错误是否意味着它根本找不到 OCX 类型,或者 OCX 接口中是否存在 VB 不支持的类型。错误指向第一次尝试在VB源代码中使用OCX对象。

170 m_SignCaptureForm.SigPlus1.TabletComTest = False

其中 SigPlus1 是 OCX 对象。从 OLE/COM Object Viewer 查看 TypeInfo,我看到的 Debug 和 Release 之间的唯一区别是所有 BOOL 返回类型在 Debug 版本中都定义为 char 和在发布版本中作为 VARIANT_BOOL

========OLE/COM Object Viewer TypeInfo for Debug ========

      char TabletLCDMode;
      [id(0x00000010)            
]

=========OLE/COM Object Viewer TypeInfo for Release ========

      VARIANT_BOOL TabletLCDMode;
      [id(0x00000010)            
]

我可以看到 OCX 源代码中没有任何内容会影响这些声明在 Debug 与 Release 中的不同。我要问的是为什么我会收到此错误,如果原因是 BOOL 类型的差异,有什么补救措施?

ocx.h:    afx_msg BOOL GetTabletLCDMode();
ocx.cpp:  DISP_PROPERTY_EX(CSigPlusCtrl, "TabletLCDMode", GetTabletLCDMode, SetTabletLCDMode, VT_BOOL)

【问题讨论】:

  • 您是否安装了调试运行时支持?
  • 在构建调试版本和发布版本时,编译器采用不同的优化并具有不同的错误检查功能。这意味着一些错误可能会在调试版本中捕获,而其他错误可能会在发布版本中捕获。如果两者不同,您可能在某处有错误。编译器不需要诊断所有错误,也可能无法诊断。
  • 在调试模式下看起来像某人“#d​​efined”VT_BOOLchar。您可以尝试定义它ocx.cpp 以获取有关redef 指向初始错误定义位置的预处理器错误。
  • @AA 我使用 Visual Studio 查看了定义,其中设置了 Release 和 Debug 的构建配置,两种配置中的 VT_BOOL 是一个值为 11 的枚举 VARENUM。两种情况下的 BOOL 都是 typedef int BOOL ;
  • 查看您的 ODL 文件及其 MIDL 设置,了解调试和发布配置之间的差异。 MFC 调度映射不用于 TypeLib,因此问题不应该出现在 cpp 文件中。

标签: c++ visual-studio vb6 ole ocx


【解决方案1】:

跟随@A。检查 OCX 项目 ODL 文件 (SigPlus.odl) 的属性设置的建议我找到了解决方案。

查看 SigPlus.odl 文件的属性时,发布与调试设置存在差异。要访问 ODL 属性,请右键单击解决方案资源管理器中源文件中的 .ODL 文件。 MkTypeLib Compatible 选项是使 Debug 构建将 bools 声明为 char 的设置。调试版本将此设置为否,而发布版本将其设置为是。一旦我将调试版本更改为 MkTypeLib Compatible:Yes 然后 OLE/COM 对象查看器 中的 TypeInfo 将布尔值显示为 VARIANT_BOOL,就像发布版本和 VB ActiveX EXE 容器一样现在构建成功。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-19
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    • 2018-09-05
    • 2016-10-19
    • 1970-01-01
    • 2018-05-29
    相关资源
    最近更新 更多