2013-10-08 73 views
0

後從MFC工作我有VB6的ActiveX(例如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中,我只使用字符串MyActiveX.MainControl來引用VB項目,所以我不明白爲什麼我應該重建我的MFC應用程序;甚至在重建我的C++ MFC應用程序之後,VB ActiveX仍未正確顯示。

在C++ MFC端實際使用的VB6 ActiveX中只有兩個函數。這就是爲什麼我刪除/移動了一些其他函數和變量,這些函數和變量只能在VB6 ActiveX中使用。所以我不知道爲什麼它停止正常顯示

回答

0

沒有。VB6是正確的。問題是關於你使用的接口,屬性和事件。這取決於如何將控件集成到MFC中。只要所有DispIds(來自IDispatch接口的調度ID)都是穩定的,並且只要您使用的所有函數仍然可用,就沒有問題。

如果DispID正在改變,函數原型會改變,您將進入Problems。

+0

嗨,謝謝你的回答。 VB6 ActiveX中只有兩個實際從C++ MFC端使用的函數。這就是爲什麼我刪除/移動了一些其他函數和變量,這些函數和變量只能在VB6 ActiveX中使用。所以我不確定爲什麼它停止正確顯示。 –

+0

在OleViewer中檢查舊界面和新界面。只要你使用相同的DispIds,你就沒有問題。 – xMRi