|
Параметры вызова функции из dll
|
|||
---|---|---|---|
#18+
Господа, есть код на FoxPro вызова функции из dll DECLARE INTEGER CheckLicense IN NEOGLITE.DLL STRING @, INTEGER @ и функция вызова nresult = checklicense(@slicense, @nuserid) Подскажите плиз как это все переписать под delphi? у меня получилось TCheckLicense = function (Value: PShortString; Key: PInteger): integer; try New(FValue); New(FKey); FValue^ := '3'; FKey^ := 0; FDllHandle := LoadLibrary(PChar('c:\project\neoglite.dll')); if FDllHandle <> HINSTANCE_ERROR then begin FCheckLicense := GetProcAddress(FDllHandle, Pchar('CheckLicense')); FCheckLicense(@FValue,@FKey); end; Dispose(FValue); Dispose(FKey); но это все валится с ошибкой Access violation at address 10041CD7 in module 'neoglite.dll'. Read of address 00000000 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2011, 15:57 |
|
Параметры вызова функции из dll
|
|||
---|---|---|---|
#18+
dimonf, оба параметра - указатели (ссылки, pointer). ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2011, 16:26 |
|
Параметры вызова функции из dll
|
|||
---|---|---|---|
#18+
да я уже понял, написал как type TCheckLicense = function (Value: PAnsiChar; Key: PInteger): integer; в коде вызываю: var FValue: AnsiString FKey: Integer begin FValue := PChar('test'); FKey := 0; FCheckLicense(@FValue,@FKey); и валится с ошибкой Access violation at address 10041CD7 in module 'neoglite.dll'. Read of address 00000000 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2011, 16:41 |
|
Параметры вызова функции из dll
|
|||
---|---|---|---|
#18+
dimonfда я уже понял, написал как type TCheckLicense = function (Value: PAnsiChar; Key: PInteger): integer; в коде вызываю: var FValue: AnsiString FKey: Integer begin FValue := PChar('test'); FKey := 0; FCheckLicense(@FValue,@FKey); PAnsiChar и PInteger - вроде как уже указатели. Зачем @ перед параметрами? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2011, 23:11 |
|
Параметры вызова функции из dll
|
|||
---|---|---|---|
#18+
Есть несколько стандартов вызова функций из DLL. Если DLL скомпилирована одним способом, а вызывают ее другим - ничего хорошего при этом не происходит, как правило просто вылетает при вызове. Как в дельфях не знаю, в Си так функция описывается: Код: plaintext
Для проверки что с компиляцией проблем нет - сделай простейшую функцию, которая выведет MessageBox`ом переданные ей параметры. Т.е. убедись что твоя функция параметры получает так как ты задумывал. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2011, 06:52 |
|
Параметры вызова функции из dll
|
|||
---|---|---|---|
#18+
Как вариант, предлагаю залинковать ее статически и переопределить. function CheckLicense(Value: PAnsiChar; Key: PInteger): integer; cdecl ; external neoglite.dll; Поиграть параметром выделенным жирным шрифтом. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2011, 12:06 |
|
|
start [/forum/topic.php?fid=41&msg=37232771&tid=1584401]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
62ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
others: | 295ms |
total: | 440ms |
0 / 0 |