Помогите разобраться с вызовом функции.
Есть длл-ка на Delphi, возникла трудность с вызовом именно одной функции, которая принимает в качестве параметров структуры.
{TParam - Входные данные следующей структуры:}
type TParam = record
Cmd :Byte;
Sm :PChar;
Cr :PChar; {3+1 байт, если '', то по умолчанию}
Tr2 :PChar; {если '',то не учитывается, max 48 байт}
Add :PChar; {если nil или '', то не учитывается. Max 184 байт}
end;
{TResult – Выходные данные следующей структуры:}
type TResult = record
Cmd :Byte;
St :Byte;
Sm :PChar; {12+1 байт}
Cd :PChar; {max 48 байт}
Cr :PChar; {3+1 байт}
RN :PChar; {12+1 байт}
DT :PChar; {19+1 байт}
TI :PChar; {8+1 байт}
CN :PChar; {5+1 байт}
AC :PChar; {6+1 байт}
HC :PChar; {2+1 байт}
HT :PChar; {32+1 байт}
ED :PChar; {4+1 байт}
TO :DWord;
TLV :PChar; {129+1 байт}
end;
Function Func(p1:Byte; var p: TParam; var r: TResult) : Byte; stdcall;
Вот как я вызываю функцию:
typedef struct TParam {
uchar Cmd;
char Sm[13];
char Cr[4];
char Tr2[48];
char Add[184];
};
typedef struct TResult {
uchar Cmd;
uchar St;
char Sm[13];
char Cd[48];
char Cr[4];
char RN[13];
char DT[20];
char TI[9];
char CN[6];
char AC[7];
char HC[3];
char HT[33];
char ED[5];
ulong TO;
char TLV[130];
};
extern "C" {
typedef uchar __declspec(dllimport)(__stdcall *Func)(uchar ver, TParam, TResult*);
}
...
TParam p;
p.Cmd = 0x20;
strcpy(p.Sm, "100");
strcpy(p.Cr, "");
strcpy(p.Tr2, "");
strcpy(p.Add, "");
TResult r;
uchar ret = lib.Func(4, p, &r); {здесь вываливается}
...
uchar Lib::Func(uchar ver, TParam p, TResult* r) {
Func function = (Func)lib.resolve("Func");
if( function) {
return function(ver, p, r);
}
return -1;
}
Как правильно переписать эти структуры на С++, что бы они были съедобны для DLL?
Спасибо!