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である。