VB6 ActiveX 在破坏兼容性后停止从 MFC 工作



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

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 应用程序应该不会受到影响。

编辑:
正如我从 vb6 中重置项目兼容性中了解到的那样,只要我重建引用它的项目,破坏兼容性就可以了。但是从 MFC 开始,我只使用字符串MyActiveX.MainControl引用 VB 项目,所以我不明白为什么要重建我的 MFC 应用程序;即使在重建我的C++ MFC 应用程序后,VB ActiveX 仍然无法正确显示。

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

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

如果 DispID 在变化,函数原型在变化,你就会遇到问题。

最新更新