![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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.
|