Вызов Clarion функции из Delphi

Вызов функции на 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 (323) (C55, ABC)
В подкаталоге Delphi находится проект DLL на все той же Delphi

© Project Zero, 2005-2006. Все права защищены.