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