Вызов функции на Delphi из Clarion и передача параметров
- Автор: Evgeny Stefanenko
- Уровень знаний: начальный/advanced
- Подразделы: нет
- Дата публикации: 21.10.2005
Задача: Вызвать из функции на Delphi функцию написанную на Кларе.
Создаем в Кларионе функцию с параметрами:
ClarionProcedure(LONG Param), LONG,PASCAL
Ее мы собственно из Delphi и будем вызывать…
Далее в Delphi лепим на скорую руку проект в котором описываем нашу процедуру как:
var ClarionProcedure: function(Param: Integer):Integer; stdcall;
Важно указать именно stdcall, для того что бы Delphi правильно передавала параметры в Clarion.
Далее нам нужно как-то передать в Delphi адрес нашей Claron процедуры, чтобы назначить его прототипу var ClarionProcedure.
Для этого в Delphi создаем процедуру DelphiProcedure для передачи адреса нашей процедуры (в добавок она вернет нам результат выполнения Кларионовской процедуры …)
function DelphiProcedure(Param: Integer):Integer;stdcall;
описываем ее код как:
begin @ClarionProcedure := Ptr(Param); // назначаем заготовке адрес Клариной процедуры Result := ClarionProcedure(9999); // вызываем Кларионовскую процедуру end;
Примечание
Clarion библиотеку в Delphi я не подгружаю т.к. все работает в связке с Кларионом, но в принципе для этого можно использовать функцию API — LoadLibrary.
handle := LoadLibrary('clariondll.dll');
и затем
begin @ClarionProcedure := GetProcAddress(handle,'ClarionProcedure'); Result := ClarionProcedure(9999); // вызываем Кларионовскую процедуру end;
Как это будет работать не проверял
9999 — передается какое-то ваше число в Clarion процедуру и результат ее выполнения возвращается опять же в Кларион.
Вызывается это все следующим образом:
Result = DelphiProcedure(ADDRESS(ClarionProcedure))
Вот практически и все … Прототип DelphiProcedure в Clarion описывается как:
MODULE('DelphiDll.Dll') DelphiProcedure(LONG Param),LONG,RAW,PASCAL END
В общем когда совмещаете Delphi с Кларионом ставьте процедурам правильные атрибуты:
- В Delphi stdcall а в Clarion PASCAL
- Так же можете попробовать cdecl и C соответственно
MultiProject (834) (C55, ABC)
В подкаталоге Delphi находится проект DLL на все той же Delphi
© Project Zero, 2005-2006. Все права защищены.