Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > вызов ф-ции из C-Dll


Автор: Max111 19.6.2006, 22:51
Доброе утро,

Подскажите в чем я могу быть не прав.

Есть DLL предоставленная заказчиком, по документации описание необходимого мне вызова следующее

BOOL startSystem (char *strPlatformDir, 
                  UINT  nPlatforms, 
                  char  strPlatforms[][_MAX_DIR], 
                  char  strPlatRegPath[][_MAX_DIR+_MAX_PATH], 
                  BOOL  bEnableConsoles, 
                  BOOL  bUsingPDD, 
                  BOOL  bUsingTIU, 
                  char *strPreStartCommandFile, 
                  char *strPostStartCommandFile,
                  char *strLicenseKey);

Я перевожу его на дельфи вот так

Function startSystem(strPlatformDir: pchar;
                           nPlatforms: HWND;
                           strPlatforms: pchar;
                           strPlatRegPath:pchar;
                           bEnableConsoles: BOOLEAN;
                           bUsingPDD: BOOLEAN;
                           bUsingTIU: BOOLEAN;
                           strPreStartCommandFile: pchar;
                           strPostStartCommandFile: pchar;
                           strLicenseKey:  pchar): BOOL; stdcall;
 external 'eas.dll';


но система при таком вызове не запускается выдавая ошибку обращения к памяти.

Как я понимаю: я могу ошибаться в декларации двухмерного C массива (strPlatforms и strPlatRegPath) как переменные pchar.

Вопрос правильно я их перевожу и если не правильно то как надо?

 

Автор: Poseidon 19.6.2006, 23:22
Сразу возникли вопросы:
  • почему ты char переводишь в pchar?
  • почему ты дописал stdcall, если нигде не написано, что применяется именно это соглашение?
  • почему массивы обьявлены не как array or char (в общем смысле)

PS. C Си не знаком, поэтому возможно чего-то не понял в "их" коде
 

Автор: Yanis 19.6.2006, 23:45
Если я не ошибаюсь, то 
Цитата(Max111 @  19.6.2006,  23:51 Найти цитируемый пост)
char  strPlatforms[][_MAX_DIR],

Цитата(Max111 @  19.6.2006,  23:51 Найти цитируемый пост)
char  strPlatRegPath[][_MAX_DIR+_MAX_PATH], 


в Delphi будут деклариться, соответственно:
Код
strPlatforms: array of array[0.._MAX_DIR-1] of Char;
Код
strPlatRegPath: array of array[0.._MAX_DIR+_MAX_PATH-1] of Char;
  

Автор: bems 20.6.2006, 10:06
BOOL так и переводи (boolean - не то). А конвенция наверное cdecl

Добавлено @ 10:08 
UINT и HWND в принципе одно и тоже, но для разных целей. А в модуле windows UINT объявлен 

Автор: Yanis 20.6.2006, 10:22
Цитата(bems @  20.6.2006,  11:06 Найти цитируемый пост)
А конвенция наверное cdecl

Ну от stdcall это мало различается. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)