Есть Dll писаная на C++. В ней есть функция, которая использует описанную структуру.
Код:
typedef struct {
unsigned int Magic;
unsigned char Version;
unsigned char GlobalMACType;
unsigned char GlobalMACScope;
int EncryptionKeyID;
unsigned char EncryptedSessionKey[SDBSET_HEADER_ENCRYPTED_SESSION_KEY_SIZE];
unsigned char Reserved[SDBSET_HEADER_RESERVED_SIZE];
} SDBSETHeader;
typedef struct {
unsigned int Magic;
unsigned int Number;
unsigned char MAC[SDBSET_TRAILER_GLOBAL_MAC_SIZE];
unsigned char Reserved[SDBSET_TRAILER_RESERVED_SIZE];
} SDBSETTrailer;
typedef struct {
char *pszAsciiMACKey;
SDBSETHeader Header;
SDBSETTrailer Trailer;
unsigned char WorkingBuffer[SDBSET_WORKING_BUFFER_SIZE];
} SDBSETParameters;
SDBSETParameters sParam;
nRet = SDBSETOpenFile(&sParam, pszFileName, SDBSET_MODE_READFILE, &fpFile);
На Дельфях написал так:
Код:
type
TSDBSETHeader = record
Magic: DWORD;
Version: byte;
GlobalMACType: byte;
GlobalMACScope: byte;
EncryptionKeyID: LongWord;
EncryptedSessionKey: array[0..63] of Char;
Reserved: array[0..180] of Char;
end;
SDBSETTrailer = record
Magic: DWORD;
Number: DWORD;
MAC: array[0..19] of Char;
Reserved: array[0..35] of Char;
end;
TSDBSETParameters = record
pszAsciiMACKey: array[0..31] of Char;
Header: TSDBSETHeader;
Trailer: SDBSETTrailer;
WorkingBuffer: array[0..127] of Char;
end;
TSDBSETOpenFile = function(psParameters: PAnsiChar; pszFileName: PAnsiChar;
nFileMode: integer; ppFile: Pointer):integer; stdcall;
var
SDBSETOpenFile: TSDBSETOpenFile;
sParam: TSDBSETParameters;
LibraryHndl: THandle;
FileSDS : Pointer;
FileName: array[0..250] of Char;
begin
LibraryHndl := 0;
FileSDS := 0;
FileName := 'n:\SDBsample.sds';
sParam.pszAsciiMACKey := '1234567812345678';
if LibraryHndl = 0 then begin
LibraryHndl := LoadLibrary(PChar('sdbset.dll'));
end;
if LibraryHndl <> 0 then begin
@SDBSETOpenFile := GetProcAddress(LibraryHndl, PChar('SDBSETOpenFile'));
end
else
raise BACSException.Create('Невозможно загрузить библиотеку sdbapi.dll');
Res := SDBSETOpenFile(@sParam,@FileName,1,@FileSDS);
Функция вызывается, но параметры не возвращаются. А точнее в sParam пишется всякая ерунда.
В чем проблема? Может я что не так объявил?