関数に関してはこの方法で__declspec(dllimport)を省略できるが変数の
参照に関してはそうはいかない。
| __declspec(dllimport) int aaa;
| int x(){ return aaa;}
これをコンパイルすると
| mov rax, QWORD PTR __imp_aaa
| mov eax, DWORD PTR [rax]
と間接参照のコードが生成されるが、
| extern int aaa;
| int x(){ return aaa;}
で生成される
| mov eax, DWORD PTR aaa
ではリンカーがどんなに頑張っても間接参照にはできない。
これが関数では省略可能な__declspec(dllimport)が変数では必須である理由。
この本質を理解していれば、↓こんな恥を晒すことはない。 wwww

>>531
> それにしても,ちっ,cl って,dll 内の変数をインポートするのに,いちいち __declspec(dllimport) つけなきゃならんのかよ,.わざわざ .def まで書かせといてこれかい,