Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

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

Есть Dll писаная на C++. В ней есть функция, которая использует описанную структуру.
Код:
typedef struct {
 
    unsigned int    Magic;
    unsigned char   Version;
    unsigned char   GlobalMACType;
    unsigned char   GlobalMACScope;
    int             EncryptionKeyID;
    unsigned char   EncryptedSessionKey[64];
    unsigned char   Reserved[181];
 
} SDBSETHeader;
 
typedef struct {
 
    unsigned int    Magic;
    unsigned int    Number;
    unsigned char   MAC[20];
    unsigned char   Reserved[36];
 
} SDBSETTrailer;
 
typedef struct {
    char            *pszAsciiMACKey;
    SDBSETHeader    Header;
    SDBSETTrailer   Trailer;
    unsigned char   WorkingBuffer[128];
 
} 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, 20:07   #2
MojoDS
Новичок
Джуниор
 
Регистрация: 14.10.2010
Сообщений: 2
По умолчанию

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


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
использование avicap32.dll kuno Общие вопросы C/C++ 1 01.10.2010 15:53
Использование Dll xmaksimca Общие вопросы Delphi 0 16.05.2010 18:36
Использование функций SFmpq.dll rangel Общие вопросы Delphi 2 16.02.2010 16:50
Использование dll Gromsky Общие вопросы C/C++ 1 10.02.2009 21:06
Cоздание dll и использование xGroupers Общие вопросы Delphi 8 25.03.2008 10:38