3月
28
Windows (Win32/Win64) の DLL において変数をインポートする場合、__declspec(dllimport)
を正しく書く必要があります。関数の場合はインポートする側でも __declspec(dllexport)
と書いても正しく動いてしまいます(不適切ではありますが)。
エクスポートする側 (DLL)
int __declspec(dllexport) int1 = 0; int __declspec(dllexport) int2 = 0; int __declspec(dllexport) func1() { return int1; } int __declspec(dllexport) func2() { return int2; }
インポートする側 (EXE)
extern int __declspec(dllexport) int1; // リンクエラー extern int __declspec(dllimport) int2; // OK int __declspec(dllexport) func1(); // リンクエラーにはならないし正しく動く int __declspec(dllimport) func2(); // OK int main(void) { int1 = 10; int2 = 10; printf("%d %d\n", func1(), func2()); return 0; }
なんで2015年にもなって今更こんな記事書いてるかというと、Win32 で今まで変数をエクスポートしようとしたことが無いんですよええ。
no comment untill now