我開發了一個MFC ActiveX控件,它使用從Kepware OPC Server使用OPC Client檢索到的數據顯示圖形。 OPC客戶端代碼是ActiveX控件代碼的一部分。 OPC客戶端在與主控制線程分離的線程中啓動。當MFC對話框中只有一個實例時,該控件工作正常。但是,如果我在同一個表單上添加另一個實例,圖表上的曲線開始出現故障。從日誌中我可以看到,最終從CWinApp派生的Control應用程序類僅實例化了一次。任何想法,爲什麼它搞砸了?兩個實例之間是否共享任何全局變量?我使用Visual Studio 2008在導致意外行爲的對話框中添加兩次相同的ActiveX控件
0
A
回答
2
如果您的ActiveX控件位於DLL此DLL總是加載一次到使用ActiveX控件的過程中。所以即使你有多個控件,你也只有一個CWinApp對象是正常的。
因此,您需要以某種方式設計對象,即DLL內部的全局數據不會影響控件實例中的行爲或數據。
我想你有一些全局數據,這是由第一個控件使用。當創建另一個實例時,這個全局數據會被第二個實例修改,並且第一個實例會顯示錯誤的數據或行爲不端。
這種ActiveX的所有狀態都必須在對象內部定位和分配。
相關問題
- 1. MFC,EndDialog,重複創建對話框導致意外行爲
- 2. 實體框架添加對象集合導致意外的行爲
- 3. 兩次添加相同的對象
- 4. <t:panelNavigation2>導致javax.faces.FacesException:無法添加相同的組件兩次
- 5. ActiveX控件中Winform Usercontrol中的Backgroundwork導致ActiveX崩潰
- 6. C++無法在對話框CFormView中顯示ActiveX控件,控件變量爲NULL
- 7. 在表中兩次相同的外鍵
- 8. 實體框架 - 在多對多關係中添加兩次相同的實體
- 9. 添加的AdWhirl的對話框導致的異常膨脹
- 10. wxPython - 防止相同的警告對話框出現兩次
- 11. android兩次調用相同的對話框
- 12. QTreeWidget兩次添加相同的項目
- 13. Arraylist添加兩次相同的信息
- 14. 相同的單詞添加兩次
- 15. ListView兩次添加相同的信息
- 16. $ route.reload()導致控制器執行兩次
- 17. 如何在MFC對話框中替換/更新ActiveX控件
- 18. 兩次導入相同的組件?
- 19. 爲什麼要添加一個while循環導致意外的行爲?
- 20. 意外的行爲:italic()導致ggplot2中兩行軸標籤的截斷
- 21. 模態對話框通過Activex控制
- 22. 設置Cookie導致意外行爲
- 23. 減1ms會導致意外行爲
- 24. NSMutablearray意外的行爲:所有對象相等於最後添加的對象
- 25. gulp-concat正在兩次添加相同的文件
- 26. Magento - 防止兩次或兩次以上添加相同的sku
- 27. NSMutableArray每次添加相同的對象
- 28. 批次回聲管道符號導致意外行爲
- 29. Attibutes在自定義文本框控件中添加了兩次
- 30. 如何停止在會話中添加兩次相同ID的項目?
我解決了這個問題,我發現我使用靜態變量來實現一個Singleton。這是由兩個實例共享的,因此導致故障。實例之間是否共享靜態變量? – Ram
是的!靜態變量是進程內DLL存儲的一部分。因此,對於您控制的每個實例,您都可以訪問相同的數據。 – xMRi