DLLにMQL5のdatetime型を引数として渡す時

 MQL5のdatetime型はMQL5内ではlongと互換性があり64bit(8バイト)である。
 64bitのC++プログラムに渡す場合、longが32bitでlong longが64bitの場合には、DLL側の引数の型をlong long型にする。
 C++DLL側の引数を32bitのlong型にしてしまうと、ポインターから要素番号でアクセスした時に意図しない結果を返す。
 VC++2022の64bitプログラムで試したところ、longポインターとしてdatetime配列を受けた場合、その引数に要素番号で順次アクセスすると、0を挟んで一つ飛ばしにdatetimeの値を取るという挙動になった。

  • 0,datetime,0,datetime,0,datetime,0,datetime,0,datetime・・・
__declspec(dllexport) int send_datetime(
	long long* _datetime
	, int _sz
)
{
    // do something
}

 一方、MQL5でDLLを#importする際に宣言する関数型は、

int send_datetime(
  long &[], int _sz
);

などとする。longはdatetimeでも良いだろう。どちらもMQL5内では64bitである。