|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Проблема с типами данных
Имеется dll для работы со внешнем оборудованием. В ней есть функция Func(Х), где X- строковый параметр. В примере для C++ параметр передаётся так:
CString IP; .... Func(ip.GetBuffer()) Вопрос: Какой тип данных должен быть в Delphi для вызова данной функции? Пробовал String, PChar, ничего не выходит. Может быть не так делаю присваивание переменной, которую пихаю в параметр функции. Как надо? |
#2
|
||||
|
||||
Если хочешь передавать строки, добавь ShareMem в uses (в самое начало). А вообще лучше PChar.
Цитата:
|
#4
|
|||
|
|||
В примере на C++ функция выглядит так :
DLL_Func(LPSTR IP); ... cas_Func=(DLL_Func *)GetProcAddress(m_hDll,"Func"); Я делал так: TFuncPar = function (S:PChar): integer; .... Func: TFuncPar; .... var ip: PChar; Func:=GetProcAddress(Handle,'Func'); ip:='192.168.0.101'; status:=Func(ip); |
#5
|
||||
|
||||
Прежде чем вызывать GetProcAddress, нужно загрузить библиотеку LoadLibrary('имя.dll'), а в GetProcAddress передавать hendle, полученный от LoadLibrary. Примерно так:
Код:
type TFuncPar = function (S: PChar): integer; stdcall; ... procedure TForm1.Button1Click(Sender: TObject); var ip: PChar; hLib:THandle; status: integer; begin hLib := LoadLibrary( 'имя.dll' ); Func := GetProcAddress( hLib, 'cas_Func' ); if @Func <> nil then begin ip := '192.168.0.101'; status := Func( ip ); ShowMessage( IntToStr( status ) ); end; FreeLibrary( hLib ); end; |
#6
|
|||
|
|||
Вопрос закрыт. Всем огромное спасибо. Проблема была в описании функции, надо было использовать директиву stdcall или cdecl. Я писал Com-объект, который вызывал функции из dll, а Com-объект в свою очередь вызывался из 1С. В этом случае работает только cdecl.
|