Вызовы функций C ++ в Delphi довольно прямой и вызывает функции Delphi в C ++
Что означает, что метод вызова функции по умолчанию Delphi 1 - это метод Pascal, Delphi 4, Delphi
Метод 5 по умолчанию - это оптимизированный метод вызова CDECL, то есть метод регистра. Быть в C ++
Реализуйте совместное использование функций с программами Delphi, если нет достаточных причин, стандарт должен использоваться.
Метод вызова голой системы, то есть метод STDCALL. Чтобы компилятор C ++ не помечал функцию как «манга»
светодиод », заставляя компилятор Delphi ошибочно полагать, что функция использует метод вызова CDECL, он должен быть в C ++
В коде, внешняя «C» описывает общую функцию, как показано в следующем примере: Прототип Описание: в C ++
В: Extern "C" int _stdcall testfunc ();
STDCALL; Синтаксис вызова: в C ++: int i = testfunc ();
В Delphi: var i: целое число;…
начинать…
i: = testfunc;…
End; параметры общей функции должна быть типом переменной, поддерживаемой обоими языками, который является правильным.
Обязательное условие для прохождения параметров. Переменные классы, такие как валюта Delphi, строка, набор и т. Д.
Тип, в C ++ не существует соответствующего типа переменной и не может использоваться в качестве параметра общей функции. Может
Пропустите указатели строк с параметрами значения, используя тип pchar. В настоящее время пользователь должен обратить внимание на символы.
Утилизация струнного пространства.
Параметры переменной на языке Delphi должны быть описаны как эталонные формы соответствующих типов переменных в C ++.
Следующим образом: в Delphi: Function testfunc (var i: integer): целое число;
В: int testfunc (int & i);
Соединение может быть сделано с помощью статического связывания или динамического связывания.
1. Статический метод связывания, если сама программа C ++ имеет небольшое количество кода, и нет необходимости беспокоиться о C
Библиотека времени выполнения будет иметь интерактивный процесс, и можно использовать метод статического связывания, то есть Delphi и C ++
Файл объекта (*.obj) связан с окончательным исполняемым файлом. Конкретный метод состоит в том, чтобы использовать {$ l}
Компиляции инструкций, чтобы позволить компилятору Delphi автоматически считывать указанный целевой файл, как описано ниже: функция
Testfunc: Integer; Stdcall; {$ l testfunc.obj} 2.
Если код C ++ уже довольно полная или полная подсистема, объем кода большой, или
При использовании библиотеки времени выполнения C, в данном случае следует использовать метод динамической библиотеки ссылок (DLL). этот
Когда следует сделать следующее объяснение в исходном коде двух языков: в C ++: int stdcall Экспорт
Testfunc ();
'Testfunc.dll';
Теперь с точки зрения методов обмена объектами, это обмен можно разделить на два уровня: объект (объект)
Обмен занятиями и обмен классом. Для реализации обмена на уровне объектов, язык программирования должен иметь
Две предпосылки: способны определить указатель на объект, созданный другим языком;
Методы в объекте, определяемом указателем.
Для реализации обмена на уровне класса вам также необходимо рассмотреть: возможность создавать классы, определяемые другим языком
Пример;
Ниже описывается метод реализации обмена объектами между Delphi и Borland C ++.
1. Чтобы поделиться объектами Delphi в C ++, чтобы реализовать объекты Delphi от C ++, сначала необходимо использовать Delphi
Интерфейс часть блока и файла заголовка C ++ указывает на интерфейс объекта, который необходимо обмениваться, в
Интерфейс объекта определяет, какие свойства и методы содержит объект, и объясняет части, которые могут быть переданы.
Ключ к обмену объектами заключается в методах обмена. На языке Дельфи Сделайте объект способным
Для обмена его можно описать как две части интерфейса, временно называемые «общий интерфейс» и «реализация
интерфейс ". Где общий интерфейс указывает, какие методы в объекте могут быть разделены другим языком;
Текущий интерфейс наследует общий интерфейс, а метод в части реализации блока используется для реализации интерфейса.
Определите конкретные реализации. Чтобы определить объект Delphi, который может быть разделен C ++, общий интерфейс
ПРИМЕЧАНИЕ. В программе Delphi метод, который следует использовать, должен быть описан как абстрактный (абстрактный).
И виртуальные (виртуальные);
Метод общего объекта должен быть объяснен Delphi как «чистый виртуальный».
Он должен быть описан на обоих языках, как один и тот же метод вызова, обычно с использованием стандартных системных вызовов
Путь (Stdcall).
Ниже давайте приведем пример этих правил, предполагая, что существует такой объект Delphi: ttestobject = classprocedure
Proc1 (x: целое число); функция func1 (x: целое число): pchar; процедура
Proc2; function func2: integer; end; если программы C ++ должны поделиться своими
Методы Proc1 и Func1 могут быть изменены в следующую форму:
StestObject = ClassProcedure
Proc1 (x: целое число);
stdcall; функция func1 (x: целое число);
Виртуально;
Proc1 (x: integer); fuction func1 (x: целое число): pchar;
Процедура proc2; функция
Func2: Integer; End;
{virtual void proc1 (int x) = 0; Virtual Char *func1 (int x) = 0;};
Чтобы успешно получить доступ к классам Delphi в C ++, должен быть указан интерфейс Delphi.
Содержит общую «заводскую функцию» CreateSteStObject,
Производственная функция может быть определена в библиотеке динамических ссылок или объектном файле (.obj), например: Библиотека
Testlib; exports createTestObject; функция CreateTeStObject: StestObject;
stdcall;
конец после такой обработки, теперь можно использовать в программах C ++, определяемые Delphi
Объект вызова выглядит следующим образом: extern "c" StestObject stdCall
*CreateTestObject (); void
Usetestobject (void) {stestobject *theTestObject = createTeStObject ();
*str = theTestObject-> func1 (0);} при вызове производственной функции createTeStObject
Когда сторона Delphi фактически заняла пространство экземпляра объекта, программа C ++ находится в
После того, как вся обработка для этого объекта завершена, пространство должно быть освобождено.
Определите класс в Delphi, такой как общий метод, свободный от Proc1, упомянутого выше, чтобы завершить это
Одна задача: stestobject = classpocedure proc1 (x: целое число);
Аннотация;
STDCALL; Процедура свободно;
выполнение…
Процедура ttestobject.free;
конец;…
End.2.delphi Обмен объектами C ++ Обычно программисты рассматривают возможность использования Delphi для компиляции.
Пользовательский интерфейс, поэтому код Delphi Code вызовет C ++, кажется более практичным. На самом деле, Дельфи
Метод реализации обмена объектами C ++ очень похож на приведенные выше объекты C ++ Delphi. Используйте то же самое
Метод описания интерфейса общего интерфейса и реализации для определения классов C ++: класс StestObject
{virtual void proc1 (int x) = 0; virtual char *func1 (int x) = 0;}; класс
Ttestobject: public stestobject {void proc1 (int x); char *func1 (int
x); void proc2 (); int func2 (); void free ();};
Полем Точно так же объекты C ++ требуют соответствующей производственной функции.
stdcall export *createTeStObject () {return (stestObject *)
New ttestobject.create;} Delphi Code можно использовать для создания функции CreateTeStObject, вызывая CreateTeStObject,
Легко создать экземпляр в C ++, получить значение указателя в этот экземпляр и использовать этот указатель
Значение для вызова общих методов в объекте. Конечно, после завершения соответствующей обработки объекта,
Не забудьте позвонить бесплатно, чтобы освободить занятое пространство.