2017-07-07 2 views
0

変数をエクスポートしてdllで使用する通常のMFCアプリケーションがあります。ここには、hereのようなexe/dllの宣言/定義の要約があります。DLLで使用するEXEから変数をエクスポートする際に問題が発生する

__declspec(dllexport) BOOL g_status; // In EXE 
__declspec(dllimport) BOOL g_status; // in DLL 

リンカーのエラーは、名前のマングリングのために見つけることができないと思われるようですか?

error LNK2001: unresolved external symbol "__declspec(dllimport) int g_status" ([email protected]@3HA) 

は、その後、私はそれが宣言になることがforces実際のexe側にextern "C"' to declaration in dll but it doesn't work because if I use C decorations on dll, the same has to be done on exe side as well but using 'extern "C"を追加し、この組み合わせを試してみました!リンカエラー以下

__declspec(dllexport) BOOL g_status; // in EXE 
extern "C" __declspec(dllimport) BOOL g_status; // in DLL 

error LNK2001: unresolved external symbol __imp__g_status 

私は少し失われています。私は関数で多くの例を見ていますが、変数を多く持たない人、それらをエクスポートする方法、そして名前の装飾がまだ有効かどうかは分かりません。

+0

あなたの最初の「EXE」は 'dllimport'を示し、' dllexport'は – franji1

+0

@ franji1です。これは投稿の入力ミスです。 – zar

+1

これはほとんどの場合、循環依存として終了します。 EXEをリンクするまで、DLLをリンクすることはできません。しかし、DLLをリンクするまで、EXEをリンクすることはできません。それは[正式に可能です](https://stackoverflow.com/questions/2727020/what-is-use-of-exp-and-what-is-the-difference-between-lib-and-dll)ですが、そうではありませんIDEによって直接サポートされています。もちろん、その変数のホームになるために別のDLLが必要な場合は、もちろん避けてください。あなたはおそらくそれのためのいくつかの使用を見つけるでしょう。 –

答えて

0

これは確かにHans Passantがコメントで指摘した循環依存性の問題でした。私の場合は、この変数を一時的にデバッグするためにこの変数を使いたかったので、それを把握したくありませんでした。

私はそれをdllの1つで宣言し、もう1つは単純な定義/宣言で以下のように使用します。

__declspec(dllexport) BOOL g_status; // In EXE 
__declspec(dllimport) BOOL g_status; // in DLL 

は、しかし、発信者のdllは、それ以外の場合は、リンカエラーが引き続き発生します呼び出し先への依存関係を持っている必要があります一つの他の注意点がありました。私はこのリンカエラーを受け取りました:

error LNK2001: unresolved external symbol "__declspec(dllimport) int g_status" ([email protected]@3HA) 

私はDLLの依存関係を設定すると、それはなくなりました。

関連する問題