Basil A. Sidorov wrote:
it is passed...
There is an exported function with quite specific signature.
There is an import of this function for usage in other language (not the C/C ++) in it "other language" is possibility to declare different signatures for unique export. It is natural, provided that these signatures are actually equivalent .
If attentively to look, declared - are equivalent.
What for it is made so is already a question to function usage in MQL. To a C/C ++, I will repeat, it is all does not concern in any way.
As a matter of fact, yes. I agree. One question on this subject remained. How you generally are guided in such moments? Here is on function RtlMoveMemory the documentation. We see:
VOID RtlMoveMemory (
_Out_ VOID UNALIGNED *Destination;
_In_ const VOID UNALIGNED *Source;
_In_ SIZE_T Length
As I understood, _Out_ it is parameter, the means which will return value as a result of function working off, and _In_ - parameter, for acceptance of arguments. Here it is clear, if I am right.
UNALIGNED as I understood from that read is necessary for pointer transmission that the compiler would assume that the pier the pointer will be not aligned . Though it is not clear, what for.
With type SIZE_T all is clear. And here the first 2 parameters have type VOID. sideways that to learn, what type to transfer?
After all in the example resulted by me:
void RtlMoveMemory (intptr_t dest, const uchar &array , size_t length);
void RtlMoveMemory (uchar &array , intptr_t src, size_t length);
void RtlMoveMemory (intptr_t dest, const MqlRates &array , size_t length);
void RtlMoveMemory (MqlRates &array , intptr_t src, size_t length);
void RtlMoveMemory (intptr_t dest, const MqlTick &value,size_t length);
void RtlMoveMemory (MqlTick &value,intptr_t src, size_t length);
void RtlMoveMemory (intptr_t &dest,intptr_t src, size_t length);
Types are transferred, except known SIZE_T also long and it is less on the size.