2011-02-23 88 views
0

我全部, 我有一個win32應用程序和幾個必須使用全局變量的DLL。在每個DLL我把初始化變量共享beetween dll

extern MYTYPE* myvariable = NULL; 

,並在主程序中我有

MYTYPE* myvariable = NULL; 
mavariable = new MYTYPE(); 
.... 

現在,當DLL加載MYVARIABLE爲NULL,我不能使用它。我怎樣才能與所有的DLL共享主程序的實例?

+0

DLL無法從EXE導入變量(或函數)。神祕號碼1解決的是你如何得到DLL鏈接。 – 2011-02-23 19:22:17

+0

我鏈接到win32程序的DLL,我會使用另一個DLL中定義的全局變量,但必須在程序中初始化,以便所有其他DLL可以使用它 – Stefano 2011-02-23 19:29:46

回答

1

你應該在你的程序的一些變化。如果有可能,您可以將EXE中的myvariable移動到DLL中的一個。然後你可以繼續使用導入庫。

它通常可以從EXE導出函數或數據,但在大多數情況下,這樣做的意義不大。所以你可以很少看到這一點。例如WinWord.exe或Excel.exe執行此操作。

如果真的需要從EXE出口frunction或數據,並用它在DLL中,你應該使用動力方面的GetProcAddressGetModuleHandle(NULL)結合。您可以在DllMain內部進行這種手動綁定。您可以在DLL的本地myvariable中保存EXE的地址myvariable

+0

真實變量在DLL中聲明並在其他人中定義爲extern。在主要我需要在dll和其他dll中初始化變量我可以調用一個方法獲取變量實例 – Stefano 2011-02-24 11:41:18

+0

@Stefano:在你的問題的文本中,你寫道:「在每個dll中,我把extern MYTYPE * myvariable = NULL「。所以在每個DLL中你都有**分開的**變量。你應該從除了一個擁有變量的DLL之外的所有移除初始化。你應該**從DLL中導出**變量,並在所有其他DLL或EXE中導入**變量。請查看http://support.microsoft.com/kb/90530,其中介紹瞭如何導出和導入數據。另請閱讀http://msdn.microsoft.com/en-us/library/z4zxe9k8.aspx – Oleg 2011-02-24 11:54:18