Delphi에서 C ++ 기능을 호출하는 것은 매우 직접적이며 C ++에서 Delphi 기능을 호출합니다
델파이 1의 기본 함수 호출 메소드는 파스칼 방법, 델파이 4, 델파이라는 것을 의미하는 바
5의 기본 메소드는 최적화 된 CDECL 호출 방법, 즉 레지스터 메소드입니다. C ++에 있습니다
충분한 이유가 없다면 표준을 사용해야하는 Delphi 프로그램과 기능 공유를 구현하십시오.
Bare-System 호출 방법, 즉 STDCALL 메소드. C ++ 컴파일러가 함수를 "Mang"로 표시하지 않으려면
LED ", Delphi 컴파일러 가이 함수가 CDECL 호출 방법을 사용한다고 잘못 믿고 C ++에 있어야한다고 잘못 생각합니다.
코드에서 외부 "C"는 다음 예와 같이 공유 함수를 설명합니다. 프로토 타입 설명 : C ++에서
in : extern "int _stdcall testfunc ();
stdcall; Call Syntax : in c ++ : int i = testfunc ();
델파이 : var i : 정수;…
시작하다…
i : = testfunc;…
끝; 공유 함수의 매개 변수는 두 언어가 지원하는 변수 유형이어야합니다.
매개 변수를 전달하기위한 전제 조건. Delphi의 통화, 문자열, 세트 등과 같은 가변 클래스
C ++에서 유형은 해당 변수 유형이 없으며 공유 함수의 매개 변수로 사용할 수 없습니다. 할 수 있다
PCHA 유형을 사용하여 값 매개 변수가있는 문자열 포인터를 통과하십시오.
문자열 공간의 재활용.
델파이 언어의 변수 매개 변수는 C ++에서 해당 변수 유형의 기준 형태로 설명해야합니다.
다음과 같이 : Delphi : function testfunc (var i : integer) : Integer;
in : int testfunc (int & i);
정적 링크 또는 동적 연결로 연결을 수행 할 수 있습니다.
1. 정적 연결 방법 C ++ 프로그램 자체에 소량의 코드가있는 경우 C에 대해 걱정할 필요가 없습니다.
런타임 라이브러리에는 대화식 프로세스가 있으며 정적 연결 방법, 즉 Delphi 및 C ++를 사용할 수 있습니다.
객체 파일 (*.obj)은 최종 실행 파일에 연결됩니다. 구체적인 방법은 {$ l}을 사용하는 것입니다.
델파이 컴파일러가 지정된 대상 파일을 자동으로 읽을 수 있도록 지침을 컴파일 : 다음과 같이 설명합니다.
testfunc : integer; stdcall; {$ l testfunc.obj} 2는 다음과 같습니다
C ++ 코드가 이미 매우 포괄적이거나 완전한 서브 시스템 인 경우 코드 볼륨이 크거나
이 경우 C 런타임 라이브러리를 사용하는 경우 DLL (Dynamic Link Library) 메소드를 사용해야합니다. 이것
언제, 다음과 같은 설명은 두 언어의 소스 코드로 작성해야합니다.
testfunc (); 델파이 : 기능 테스트 펀치;
'testfunc.dll';
이제 객체 공유 방법 측면 에서이 공유는 두 가지 레벨로 나눌 수 있습니다 : Object (Object)
수업 공유 및 수업 공유. 객체 수준 공유를 구현하려면 프로그래밍 언어가 있어야합니다
두 가지 전제 조건 : 다른 언어로 생성 된 객체에 대한 포인터를 정의 할 수 있습니다
포인터에 의해 결정된 물체의 메소드.
클래스 수준 공유를 구현하려면 다음을 고려해야합니다. 다른 언어로 정의 된 클래스를 만들 수 있습니다.
인스턴스가 차지하는 공간은 힙에서 해제 될 수 있습니다.
다음은 Delphi와 Borland C ++ 사이에 객체 공유를 구현하는 방법을 설명합니다.
1. C ++의 Delphi 객체를 공유하려면 C ++에서 Delphi 객체의 호출을 구현하려면 먼저 Delphi를 사용해야합니다.
장치의 인터페이스 부분과 C ++ 헤더 파일은 공유 해야하는 객체의 인터페이스를
객체 인터페이스는 객체에 포함 된 속성과 메소드를 정의하고 공유 할 수있는 부분을 설명합니다.
객체를 공유하는 열쇠는 방법을 공유하는 데 있습니다. 델파이 언어로 객체를 능숙하게 만듭니다
공유하려면 일시적으로 "공유 인터페이스"및 "구현이라고하는 두 개의 인터페이스 부품으로 설명 할 수 있습니다.
인터페이스 ". 공유 인터페이스가 다른 언어로 공유 할 수있는 메소드를 나타냅니다.
현재 인터페이스는 공유 인터페이스를 상속하고 장치의 구현 부분의 메소드는 인터페이스를 구현하는 데 사용됩니다.
특정 구현을 정의합니다. C ++에서 공유 할 수있는 델파이 개체를 정의하려면 공유 인터페이스
참고 : 델파이 프로그램에서 공유 할 방법은 추상 (초록)으로 설명해야합니다.
및 가상 (가상); C ++ 프로그램에서는 "가상"및 "= 0"을 사용해야합니다.
공유 객체 방법은 Delphi에 의해 "순수한 가상"으로 설명되어야합니다.
일반적으로 표준 시스템 호출을 사용하여 동일한 호출 방법으로 두 언어로 설명해야합니다.
길 (stdcall).
아래, 델파이 객체가 있다고 가정하면이 규칙의 예를 들어 봅시다 : ttestobject = classprocedure
proc1 (x : integer); 함수 func1 (x : integer) : pchar; 절차
proc2; function func2 : 정수; 끝; C ++ 프로그램이 공유 해야하는 경우
방법 proc1 및 func1은 다음 형식으로 수정 될 수 있습니다.
stestobject = classprocedure
Proc1 (X : 정수);
stdcall; function func1 (x : 정수);
가상; 초록; 끝; ttestobject = class (stestobject) 절차
proc1 (x : integer); fuction func1 (x : integer) : pchar;
절차 proc2; 함수
func2 : 정수; 끝;
{virtual void proc1 (int x) = 0; virtual char *func1 (int x) = 0;};
C ++에서 Delphi 정의 클래스에 성공적으로 액세스하려면 Delphi 인터페이스를 지정해야합니다.
공유 가능한 "공장 기능"CreateTestObject,
제조 기능은 동적 링크 라이브러리 또는 객체 파일 (.OBJ)에서 정의 할 수 있습니다.
testlib; createTestObject; function reateTestObject : stestObject;
stdcall; 시작 result : = ttestobject.create; end;…
끝. 그러한 처리 후, 이것은 이제 Delphi가 정의한 C ++ 프로그램에서 사용할 수 있습니다.
통화의 대상은 다음과 같습니다. extern "C"StestObject stdcall
*createTestObject (); void
UsetestObject (void) {stestobject *thetestObject = createTestObject ();
*str = thetestObject-> func1 (0);} 제조 기능 CreateTestObject를 호출 할 때
Delphi 측이 실제로 객체 인스턴스의 공간을 차지할 때 C ++ 프로그램이
이 객체에 대한 모든 처리가 완료되면 특정 구현이 해제 될 수 있습니다
위에서 언급 한 Proc1이없는 공유 방법과 같은 델파이의 클래스를 정의하여이를 완료하십시오.
한 가지 작업 : stestobject = classprocedure proc1 (x : integer);
stdcall; function func1 (x : 정수);
stdcall; 가상;
구현…
절차 ttestobject.free…
끝;…
end.2.delphi 공유 C ++ 객체 일반적으로 프로그래머는 델파이를 사용하여 컴파일하는 것을 고려합니다.
사용자 인터페이스가 있으므로 Delphi 코드가 C ++ 코드를 호출하는 것이 더 실용적인 것 같습니다. 사실, 델파이
C ++ 객체를 공유하는 구현 방법은 위의 C ++ 공유 델파이 객체와 매우 유사합니다. 똑같이 사용하십시오
C ++ 클래스를 정의하는 공유 인터페이스 및 구현 인터페이스 설명 메소드 : Class 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 내보내기 *createTestObject () {return (stestObject *)
new ttestobject.create;} delphi 코드를 사용하여 CreateTestObject를 호출하여 CreateTestObject 함수를 작성할 수 있습니다.
C ++에서 인스턴스를 만들고 해당 인스턴스에 대한 포인터 값을 가져 오고이 포인터를 사용하는 것은 쉽습니다.
객체에서 공유 방법을 호출하는 값. 물론 객체의 관련 처리를 완료 한 후
점령 된 공간을 자유롭게하기 위해 무료로 전화하는 것을 잊지 마십시오.