![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Есть 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 пишется всякая ерунда. В чем проблема? Может я что не так объявил? Последний раз редактировалось MojoDS, 14.10.2010 в 19:24. |
#2
|
|||
|
|||
![]() Код:
pszAsciiMACKey: array[0..31] of Char Код:
pszAsciiMACKey: PAnsiChar; |