レガシ Visual C++ 6 アプリの修正で行き詰まっています。私が入れたC++ DLLソースで
extern "C" _declspec(dllexport) char* MyNewVariable = 0;
その結果、(dumpbin /exports blah.dll で示されるように) エクスポート テーブルに MyNewVariable が (きれいに装飾されずに) 表示されます。しかし、C ソース ファイルでアクセスできるように変数を宣言する方法がわかりません。私はさまざまなことを試しました。
_declspec(dllimport) char* MyNewVariable;
しかし、それは私にリンカエラーを与えます:
未解決の外部シンボル "__declspec(dllimport) char * MyNewVariable" (__imp_?MyNewVariable@@3PADA)
extern "C" _declspec(dllimport) char* MyNewVariable;
トニーが示唆したように(そして私が以前に試したように)、予想される装飾が異なりますが、まだ削除されていません:
未解決の外部シンボル __imp__MyNewVariable
C アプリから C++ DLL 変数にアクセスできるように宣言を作成するにはどうすればよいですか?
答え
botismarius やその他の方々 (皆さんに感謝します) が特定したように、DLL の .lib とリンクする必要がありました。名前が壊れないようにするために、(C ソースで) デコレーターなしで宣言する必要がありました。つまり、.lib ファイルを使用する必要がありました。