调试&发布版本的OCX不兼容"变量使用Visual Basic不支持的自动化类型"

时间:2018-03-21 21:12:03

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

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

如果我注册Release版本,那么VB ActiveX EXE容器将编译并运行。我已经在线搜索了这个错误,但结果并不是很有用。如果错误意味着它根本无法找到OCX类型,或者如果OCX接口中的类型不支持VB,则不是很清楚。该错误指向首次尝试在VB源代码中使用OCX对象。

170 m_SignCaptureForm.SigPlus1.TabletComTest = False

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

========用于调试的OLE / COM对象查看器TypeInfo ========

      char TabletLCDMode;
      [id(0x00000010)            
]

========= OLE / COM对象查看器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)

1 个答案:

答案 0 :(得分:3)

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

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

enter image description here enter image description here