2011-02-23 24 views
0

私はすべて、 私はwin32アプリケーションと、グローバル変数を使用する必要があるいくつかのDLLを持っています。各DLLに私はdllの間で変数を共有する初期化

extern MYTYPE* myvariable = NULL; 

を入れて、メインプログラムの中で私が

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

を持っているDLLがロードされたときに、今、MYVARIABLEはNULLであり、私はそれを使用することはできません。メインプログラムのインスタンスをすべてのDLLとどのように共有できますか?多分あなたは、この探している

+0

DLLは変数(または関数)をEXEからインポートできません。ミステリーナンバー1は、DLLをリンクさせる方法を解決するものです。 –

+0

DLLをwin32プログラムにリンクし、別のDLLで定義されているグローバル変数を使用しますが、他のすべてのDLLで使用できるようにプログラムで初期化する必要があります – Stefano

答えて

1

あなたのプログラム内のいくつかの変更を行う必要があります。可能であれば、myvariableをEXEからDLLから1つに移動できます。インポートライブラリを引き続き使用できます。

一般的に、EXEから関数やデータをエクスポートすることはできますが、ほとんどの場合、これを行う意味がありません。あなたはこれをほとんど見ることができません。たとえば、WinWord.exeやExcel.exeなどでこれを行います。

本当にEXEからfrunctionやデータをエクスポートし、GetProcAddressGetModuleHandle(NULL)のに対しを結合力学を使用する必要があるDLLでそれを使用する必要がある場合。 DllMainのような種類の手動バインドを行うことができます。 EXEのmyvariableのアドレスは、ローカルのmyvariableのDLLに保存することができます。

+0

の同じインスタンスを持つ各DLLは、実変数がDLLで宣言され、他の変数でexternとして定義されます。メインでは、dll変数と他のdll変数を初期化する必要があります。変数インスタンスを取得するメソッドを呼び出すことができます。 – Stefano

+0

@Stefano:あなたの質問のテキストでは、「各DLLにextern MYTYPE * myvariable = NULL "である。したがって、すべてのDLLには、** separate **変数があります。変数を所有する1つのDLL以外のすべてから初期化を削除する必要があります。 DLLから変数をエクスポート**し、他のすべてのDLLまたはEXEで**変数**をインポートする必要があります。データのエクスポートとインポートの方法については、http://support.microsoft.com/kb/90530を参照してください。 http://msdn.microsoft.com/en-us/library/z4zxe9k8.aspxも参照してください。 – Oleg