2015-09-29 20 views
0

我開發了一個MFC ActiveX控件,它使用從Kepware OPC Server使用OPC Client檢索到的數據顯示圖形。 OPC客戶端代碼是ActiveX控件代碼的一部分。 OPC客戶端在與主控制線程分離的線程中啓動。當MFC對話框中只有一個實例時,該控件工作正常。但是,如果我在同一個表單上添加另一個實例,圖表上的曲線開始出現故障。從日誌中我可以看到,最終從CWinApp派生的Control應用程序類僅實例化了一次。任何想法,爲什麼它搞砸了?兩個實例之間是否共享任何全局變量?我使用Visual Studio 2008在導致意外行爲的對話框中添加兩次相同的ActiveX控件

回答

2

如果您的ActiveX控件位於DLL此DLL總是加載一次到使用ActiveX控件的過程中。所以即使你有多個控件,你也只有一個CWinApp對象是正常的。

因此,您需要以某種方式設計對象,即DLL內部的全局數據不會影響控件實例中的行爲或數據。

我想你有一些全局數據,這是由第一個控件使用。當創建另一個實例時,這個全局數據會被第二個實例修改,並且第一個實例會顯示錯誤的數據或行爲不端。

這種ActiveX的所有狀態都必須在對象內部定位和分配。

+0

我解決了這個問題,我發現我使用靜態變量來實現一個Singleton。這是由兩個實例共享的,因此導致故障。實例之間是否共享靜態變量? – Ram

+0

是的!靜態變量是進程內DLL存儲的一部分。因此,對於您控制的每個實例,您都可以訪問相同的數據。 – xMRi

相關問題