Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.10.2010, 19:22
MojoDS MojoDS вне форума
Прохожий
 
Регистрация: 14.10.2010
Сообщения: 2
Репутация: 10
По умолчанию Использование DLL с структурой описанной на C++

Есть 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  
Старый 14.10.2010, 20:14
MojoDS MojoDS вне форума
Прохожий
 
Регистрация: 14.10.2010
Сообщения: 2
Репутация: 10
По умолчанию

Код:
pszAsciiMACKey: array[0..31] of Char
Поменял на
Код:
pszAsciiMACKey: PAnsiChar;
И все заработало. Всем спасибо.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:11.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025