DLLのエクスポート関数の名前

VC++2012で作成したDLLを,Meta Trader 4というプログラムから呼び出すときにひっかかったのでメモ.

エクスポート関数を指定するには,__declspec(dllexport)をつけるか,.defファイルを定義するか,の2つの選択肢がある.
__declspec(dllexport)をつければ,.defファイルは不要なのだがエクスポート関数名に余計な接尾辞(サフィクス?)が付いてしまうところではまった.以下に示す.DLLはC++ファイルで書いている.


1.__declspec(dllexport)のみの場合
ソース:
__declspec(dllexport) int __stdcall plusInt(int a, int b);
エクスポート名:
?plusInt@@YGHHH@Z


2.extern "C" __declspec(dllexport)の場合
extern "C" __declspec(dllexport) int __stdcall plusInt(int a, int b);
エクスポート名:
_plusInt@8


3.defファイルに定義した場合
.def:
EXPORTS plusInt
ソース:
int __stdcall plusInt(int a, int b)
エクスポート名:
plusInt


引数違いの同名関数のエクスポート名が被らないようにサフィックスをつけているらしい.
ところで,2の時の@8はなんだろう?
plusIntの序数は1だったので違うみたいだし・・・.
内部的な通し番号?