การเรียกฟังก์ชั่น C ++ ใน Delphi ค่อนข้างตรงและการเรียกฟังก์ชั่น Delphi ใน C ++
หมายความว่าวิธีการเรียกใช้ฟังก์ชันเริ่มต้นของ Delphi 1 คือวิธี Pascal, Delphi 4, Delphi
วิธีเริ่มต้นของ 5 คือวิธีการโทร CDECL ที่ได้รับการปรับปรุงนั่นคือวิธีการลงทะเบียน อยู่ใน C ++
ใช้การแบ่งปันฟังก์ชั่นกับโปรแกรม Delphi เว้นแต่จะมีเหตุผลเพียงพอควรใช้มาตรฐาน
วิธีการโทรแบบระบบเปล่านั่นคือวิธี stdcall เพื่อให้คอมไพเลอร์ C ++ ไม่ทำเครื่องหมายฟังก์ชั่นเป็น "Mang"
LED "ทำให้คอมไพเลอร์ Delphi เชื่อผิดพลาดว่าฟังก์ชั่นใช้วิธีการโทร CDECL ควรอยู่ใน C ++
ในรหัสภายนอก "C" อธิบายฟังก์ชันที่ใช้ร่วมกันดังที่แสดงในตัวอย่างต่อไปนี้: ต้นแบบคำอธิบาย: ใน C ++
ใน: extern "C" int _STDCALL TESTFUNC ();
stdcall; การโทรไวยากรณ์: ใน C ++: int i = testFunc ();
ใน Delphi: var i: จำนวนเต็ม; ...
เริ่ม…
i: = testfunc; …
สิ้นสุด; พารามิเตอร์ของฟังก์ชั่นที่ใช้ร่วมกันจะต้องเป็นประเภทตัวแปรที่รองรับโดยทั้งสองภาษาซึ่งเป็นภาษาที่ถูกต้อง
วิชาบังคับก่อนสำหรับการผ่านพารามิเตอร์ คลาสตัวแปรเช่นสกุลเงินของ Delphi, String, Set, ฯลฯ
พิมพ์ใน C ++ ไม่มีประเภทตัวแปรที่สอดคล้องกันและไม่สามารถใช้เป็นพารามิเตอร์ของฟังก์ชั่นที่ใช้ร่วมกัน สามารถ
ผ่านพอยน์เตอร์สตริงที่มีพารามิเตอร์ค่าโดยใช้ประเภท PCHAR ในเวลานี้ผู้ใช้จะต้องให้ความสนใจกับอักขระ
การรีไซเคิลพื้นที่สตริง
พารามิเตอร์ตัวแปรในภาษา Delphi ควรอธิบายเป็นรูปแบบการอ้างอิงของประเภทตัวแปรที่เกี่ยวข้องใน C ++
ดังต่อไปนี้: ใน Delphi: Function TestFunc (VAR I: Integer): Integer;
ใน: int testfunc (int & i);
การเชื่อมต่อสามารถทำได้โดยการเชื่อมโยงแบบคงที่หรือการเชื่อมโยงแบบไดนามิก
1. วิธีการเชื่อมโยงแบบคงที่หากโปรแกรม C ++ มีรหัสจำนวนเล็กน้อยและไม่จำเป็นต้องกังวลเกี่ยวกับ C
ไลบรารีรันไทม์จะมีกระบวนการโต้ตอบและสามารถใช้วิธีการเชื่อมโยงแบบคงที่นั่นคือ Delphi และ C ++
ไฟล์วัตถุ (*.OBJ) เชื่อมโยงกับไฟล์ปฏิบัติการสุดท้าย วิธีเฉพาะคือการใช้ {$ l}
รวบรวมคำแนะนำเพื่อเปิดใช้งานคอมไพเลอร์ Delphi เพื่ออ่านไฟล์เป้าหมายที่ระบุโดยอัตโนมัติตามที่อธิบายไว้ด้านล่าง: ฟังก์ชั่น
testfunc: จำนวนเต็ม; stdcall; {$ l testfunc.obj} 2
หากรหัส C ++ ค่อนข้างครอบคลุมอยู่แล้วหรือระบบย่อยที่สมบูรณ์ปริมาณรหัสมีขนาดใหญ่หรือ
เมื่อใช้ไลบรารี C Runtime ในกรณีนี้ควรใช้วิธี Dynamic Link Library (DLL) นี้
เมื่อใดที่คำอธิบายต่อไปนี้ควรทำในซอร์สโค้ดสองภาษา: ใน C ++: Int StdCall Export
testfunc ();
'testfunc.dll';
ตอนนี้ในแง่ของวิธีการแบ่งปันวัตถุการแชร์นี้สามารถแบ่งออกเป็นสองระดับ: วัตถุ (วัตถุ)
การแบ่งปันคลาสและการแบ่งปันคลาส ในการใช้การแบ่งปันระดับวัตถุต้องใช้ภาษาการเขียนโปรแกรม
สิ่งที่จำเป็นต้องมีสองประการ: สามารถกำหนดตัวชี้ไปยังวัตถุที่สร้างขึ้นโดยภาษาอื่น
วิธีการในวัตถุที่กำหนดโดยตัวชี้
ในการใช้การแบ่งปันระดับชั้นเรียนคุณต้องพิจารณา: ความสามารถในการสร้างคลาสที่กำหนดโดยภาษาอื่น
อินสแตนซ์;
ต่อไปนี้อธิบายวิธีการใช้การแบ่งปันวัตถุระหว่าง Delphi และ Borland C ++
1. ในการแบ่งปันวัตถุ Delphi ใน C ++ เพื่อใช้การเรียกของวัตถุ Delphi จาก C ++ คุณต้องใช้ Delphi ก่อน
ส่วนอินเทอร์เฟซของหน่วยและไฟล์ส่วนหัว C ++ ระบุอินเทอร์เฟซของวัตถุที่จำเป็นต้องใช้ร่วมกันใน
อินเตอร์เฟสวัตถุกำหนดคุณสมบัติและวิธีการที่วัตถุมีและอธิบายชิ้นส่วนที่สามารถแบ่งปันได้
กุญแจสำคัญในการแบ่งปันวัตถุอยู่ในวิธีการแบ่งปัน ในภาษา Delphi ทำให้วัตถุมีความสามารถ
ที่จะแบ่งปันสามารถอธิบายได้ว่าเป็นสองส่วนอินเทอร์เฟซเรียกว่า "อินเทอร์เฟซที่ใช้ร่วมกันชั่วคราว" และ "การใช้งาน
อินเทอร์เฟซ ". โดยที่อินเตอร์เฟสที่ใช้ร่วมกันระบุว่าวิธีการใดในวัตถุสามารถใช้ร่วมกันได้ด้วยภาษาอื่น
อินเทอร์เฟซปัจจุบันสืบทอดอินเทอร์เฟซที่ใช้ร่วมกันและวิธีการในส่วนการใช้งานของหน่วยใช้เพื่อใช้อินเทอร์เฟซ
กำหนดการนำไปใช้งานเฉพาะ เพื่อกำหนดวัตถุ Delphi ที่สามารถแชร์ได้โดย C ++ อินเตอร์เฟสที่ใช้ร่วมกัน
หมายเหตุ: ในโปรแกรม Delphi วิธีที่จะแบ่งปันจะต้องอธิบายว่าเป็นนามธรรม (นามธรรม)
และเสมือนจริง (เสมือนจริง); ในโปรแกรม C ++ ต้องใช้คำหลัก "เสมือน" และ "= 0"
วิธีการที่ใช้ร่วมกันจะต้องอธิบายว่า "เสมือนจริง" โดย Delphi
จะต้องอธิบายในทั้งสองภาษาเป็นวิธีการโทรเดียวกันโดยปกติจะใช้การโทรแบบมาตรฐาน
ทาง (stdcall)
ด้านล่างให้ตัวอย่างของกฎเหล่านี้โดยสมมติว่ามีวัตถุ Delphi: ttestobject = classprocedure
proc1 (x: จำนวนเต็ม); ฟังก์ชั่น func1 (x: จำนวนเต็ม): pchar; ขั้นตอน
proc2; ฟังก์ชั่น func2: จำนวนเต็ม; สิ้นสุด; ถ้าโปรแกรม C ++ จำเป็นต้องแบ่งปัน
วิธีการ PROC1 และ FUNC1 สามารถปรับเปลี่ยนเป็นแบบฟอร์มต่อไปนี้:
stestobject = classprocedure
Proc1 (x: จำนวนเต็ม);
stdcall; ฟังก์ชั่น func1 (x: จำนวนเต็ม);
เสมือนจริง;
proc1 (x: จำนวนเต็ม); fuction func1 (x: จำนวนเต็ม): pchar;
ขั้นตอน proc2; ฟังก์ชั่น
func2: จำนวนเต็ม; สิ้นสุด;
{void void proc1 (int x) = 0; char เสมือน *func1 (int x) = 0;};
ในการเข้าถึงคลาสที่กำหนด Delphi ใน C ++ สำเร็จจะต้องระบุอินเตอร์เฟส Delphi
มี "ฟังก์ชั่นโรงงาน" ที่แชร์ได้
ฟังก์ชั่นการผลิตสามารถกำหนดได้ในไลบรารีลิงก์แบบไดนามิกหรือไฟล์วัตถุ (.OBJ) ตัวอย่างเช่นไลบรารี
TestLib; Exports CreateTeStoBject; Function CreateTeTeStObject: StestObject;
stdcall;
สิ้นสุด
วัตถุของการโทรมีดังนี้: extern "c" stestobject stdcall
*createTetestObject (); เป็นโมฆะ
usetestobject (เป็นโมฆะ) {Stestobject *theTeStobject = createTeStObject ();
*str = theTeStObject-> func1 (0);} เมื่อเรียกฟังก์ชั่นการผลิต createTeStobject
เมื่อฝั่ง Delphi ครอบครองพื้นที่ของอินสแตนซ์วัตถุจริงโปรแกรม C ++ จะอยู่ใน
หลังจากการประมวลผลทั้งหมดสำหรับวัตถุนี้เสร็จสิ้นพื้นที่จะต้องเป็นอิสระ
กำหนดชั้นเรียนใน Delphi เช่นวิธีที่ใช้ร่วมกันโดยปราศจาก Proc1 ที่กล่าวถึงข้างต้นเพื่อให้เสร็จสมบูรณ์
งานหนึ่ง: Stestobject = classprocedure proc1 (x: จำนวนเต็ม);
บทคัดย่อ;
stdcall; ฟรีขั้นตอน;
การดำเนินการ ...
ขั้นตอน ttestobject.free;
จบ;…
end.2.delphi แชร์วัตถุ C ++ โดยปกติโปรแกรมเมอร์จะพิจารณาใช้ Delphi เพื่อรวบรวม
อินเทอร์เฟซผู้ใช้ดังนั้นรหัส Delphi จึงเรียกรหัส C ++ ดูเหมือนว่าจะใช้งานได้จริงมากขึ้น จริงๆแล้ว Delphi
วิธีการใช้งานของการแชร์วัตถุ C ++ นั้นคล้ายกับวัตถุ Delphi ที่ใช้ร่วมกัน C ++ ข้างต้น ใช้สิ่งเดียวกัน
อินเทอร์เฟซที่ใช้ร่วมกันและการใช้งานอินเตอร์เฟสคำอธิบายวิธีการกำหนดคลาส C ++: คลาส Stestobject
{void void proc1 (int x) = 0; char เสมือน *func1 (int x) = 0;}; คลาส
ttestobject: Stestobject สาธารณะ {void proc1 (int x); char *func1 (int
x); void proc2 (); int func2 (); void free ();};
- ในทำนองเดียวกันวัตถุ C ++ ต้องการฟังก์ชั่นการผลิตที่สอดคล้องกัน
STDCALL EXPORT *CREATETETESTOBJECT () {return (StestObject *)
ใหม่ ttestobject.create;} รหัส delphi สามารถใช้เพื่อสร้างฟังก์ชัน createTeStoBject โดยเรียก createTeStObject
เป็นเรื่องง่ายที่จะสร้างอินสแตนซ์ใน C ++ รับค่าตัวชี้ไปที่อินสแตนซ์นั้นและใช้ตัวชี้นี้
ค่าที่จะเรียกวิธีการที่ใช้ร่วมกันในวัตถุ แน่นอนหลังจากเสร็จสิ้นการประมวลผลที่เกี่ยวข้องของวัตถุ
อย่าลืมโทรฟรีเพื่อเพิ่มพื้นที่ว่าง