0

我有MyActiveX从 MFC 使用的 VB6 ActiveX(例如):

m_pControl = new CWnd;
m_pControl->CreateControl("MyActiveX.MainControl",
                          "",
                          WS_VISIBLE, 
                          rc,
                          this,
                          5000,
                          NULL,
                          FALSE,
                          NULL);

当我删除一些未使用的函数或移动变量(未在 VB ActiveX 之外使用)时,VB6 会发出有关破坏兼容性的警告。我选择破坏兼容性,但现在 VB6 ActiveX 无法从 MFC 应用程序中正确显示。

据我了解,破坏兼容性将为接口和类型库创建新的 UUID。只要我能做点什么让它再次工作就可以了,而且由于我使用的是字符串 ProgID MyActiveX.MainControl,我认为我的 MFC 应用程序不应该受到影响。

编辑:
据我了解Resetting project compatibility in vb6,只要我重建引用它的项目,破坏兼容性就可以了。但是在 MFC 中,我只使用字符串来引用 VB 项目,MyActiveX.MainControl所以我不明白为什么要重建我的 MFC 应用程序;即使在重建我的 C++ MFC 应用程序之后,VB ActiveX 仍然没有正确显示。

VB6 ActiveX 中只有两个函数在 C++ MFC 端实际使用。这就是为什么我删除/移动了一些仅在 VB6 ActiveX 中使用的其他函数和变量。所以我不确定为什么它停止正确显示

4

1 回答 1

0

不,VB6 是对的。问题在于您使用的接口、属性和事件。这取决于您如何将控件集成到 MFC 中。只要所有 DispId(来自 IDispatch 接口的调度 Id)都稳定,并且只要您使用的所有功能仍然可用,您就没有问题。

如果 DispID 发生变化,函数原型发生变化,您将遇到问题。

于 2013-10-08T05:50:07.707 回答