Memanggil fungsi C ++ di Delphi cukup langsung dan memanggil fungsi Delphi di C ++
Apa yang dimaksudkan bahwa metode panggilan fungsi default Delphi 1 adalah Metode Pascal, Delphi 4, Delphi
Metode default 5 adalah metode panggilan CDECL yang dioptimalkan, yaitu metode register. Berada di C ++
Menerapkan berbagi fungsi dengan program Delphi, kecuali ada alasan yang cukup, standar harus digunakan.
Metode panggilan sistem telanjang, yaitu metode stdcall. Agar kompiler C ++ tidak menandai fungsi sebagai "mang"
LED ", menyebabkan kompiler Delphi secara keliru percaya bahwa fungsi tersebut menggunakan metode panggilan cdecl, itu harus di C ++
Dalam kode, eksternal "C" menjelaskan fungsi bersama, seperti yang ditunjukkan dalam contoh berikut: Prototipe Deskripsi: Dalam C ++
Dalam: Extern "C" int _stdcall testfunc ();
stdcall; sintaks panggilan: dalam c ++: int i = testfunc ();
Di Delphi: Var I: Integer;…
mulai…
i: = testfunc;…
end; parameter fungsi bersama harus berupa jenis variabel yang didukung oleh kedua bahasa, yang merupakan yang benar.
Prasyarat untuk parameter yang lewat. Kelas variabel seperti mata uang Delphi, string, set, dll.
Ketik, dalam C ++, tidak ada tipe variabel yang sesuai dan tidak dapat digunakan sebagai parameter fungsi bersama. Bisa
Lewati pointer string dengan parameter nilai menggunakan tipe PCHAR.
Daur ulang ruang string.
Parameter variabel dalam bahasa Delphi harus digambarkan sebagai bentuk referensi dari jenis variabel yang sesuai dalam C ++.
Sebagai berikut: Di Delphi: Function TestFunc (Var I: Integer): Integer;
Dalam: int testfunc (int & i);
Koneksi dapat dilakukan dengan tautan statis atau tautan dinamis.
1. Metode tautan statis jika program C ++ itu sendiri memiliki sejumlah kecil kode, dan tidak perlu khawatir tentang c
Perpustakaan runtime akan memiliki proses interaktif, dan metode penghubung statis dapat digunakan, yaitu, Delphi dan C ++
File objek (*.obj) ditautkan ke file akhir yang dapat dieksekusi. Metode spesifiknya adalah menggunakan {$ l}
Kompilasi instruksi untuk mengaktifkan kompiler delphi untuk secara otomatis membaca file target yang ditentukan, seperti yang dijelaskan di bawah ini: fungsi
Testfunc: integer; stdcall; {$ l testfunc.obj} 2.
Jika kode C ++ sudah cukup komprehensif atau subsistem lengkap, volume kode besar, atau
Saat menggunakan perpustakaan C Runtime, dalam hal ini, metode Dynamic Link Library (DLL) harus digunakan. ini
Kapan, penjelasan berikut harus dibuat dalam kode sumber dua bahasa: dalam C ++: int stdcall ekspor
Testfunc ();
'Testfunc.dll';
Sekarang dalam hal berbagi metode objek, berbagi ini dapat dibagi menjadi dua tingkat: objek (objek)
Berbagi kelas dan berbagi kelas. Untuk mengimplementasikan berbagi tingkat objek, bahasa pemrograman harus dimiliki
Dua prasyarat: mampu mendefinisikan pointer ke objek yang dibuat oleh bahasa lain;
Metode dalam suatu objek yang ditentukan oleh penunjuk.
Untuk mengimplementasikan berbagi tingkat kelas, Anda juga perlu mempertimbangkan: dapat membuat kelas yang ditentukan oleh bahasa lain
contoh;
Berikut ini menjelaskan metode penerapan berbagi objek antara Delphi dan Borland C ++.
1. Untuk berbagi objek Delphi di C ++, untuk mengimplementasikan panggilan objek Delphi dari C ++, Anda harus terlebih dahulu menggunakan Delphi
Bagian antarmuka unit dan file header C ++ menunjukkan antarmuka objek yang perlu dibagikan, di dalam
Antarmuka objek mendefinisikan sifat dan metode apa yang dikandung objek, dan menjelaskan bagian -bagian yang dapat dibagikan.
Kunci untuk berbagi objek terletak pada metode berbagi. Dalam bahasa Delphi, buat objek yang mampu
Untuk dibagikan, dapat digambarkan sebagai dua bagian antarmuka, untuk sementara disebut "antarmuka bersama" dan "implementasi
antarmuka ". Di mana antarmuka bersama menunjukkan metode mana yang dapat dibagikan oleh bahasa lain;
Antarmuka saat ini mewarisi antarmuka bersama, dan metode di bagian implementasi unit digunakan untuk mengimplementasikan antarmuka.
Tentukan implementasi spesifik. Untuk mendefinisikan objek Delphi yang dapat dibagikan oleh C ++, antarmuka bersama
Catatan: Dalam program Delphi, metode yang akan dibagikan harus digambarkan sebagai abstrak (abstrak).
Dan virtual (virtual); dalam program C ++, kata kunci "virtual" dan "= 0" harus digunakan.
Metode objek bersama harus dijelaskan sebagai "virtual murni" oleh Delphi.
Itu harus dijelaskan dalam kedua bahasa sebagai metode panggilan yang sama, biasanya menggunakan panggilan sistem standar
cara (stdcall).
Di bawah ini, mari kita berikan contoh aturan ini, dengan asumsi bahwa ada objek Delphi seperti itu: ttestObject = classprocedure
Proc1 (x: integer); fungsi func1 (x: integer): pchar; prosedur
Proc2; fungsi func2: integer; end; jika program c ++ perlu berbagi
Metode Proc1 dan Func1 dapat dimodifikasi ke dalam bentuk berikut:
StestObject = ClassProcedure
Proc1 (X: Integer);
stdcall; fungsi func1 (x: integer);
Virtual;
Proc1 (x: integer); fuction func1 (x: integer): pchar;
Prosedur Proc2; Fungsi
Func2: integer; end; buat deskripsi prototipe objek berikut dalam program C ++: Class StestObject
{virtual void proc1 (int x) = 0; virtual char *func1 (int x) = 0;};
Agar berhasil mengakses kelas yang ditentukan Delphi di C ++, antarmuka Delphi harus ditentukan.
Berisi "fungsi pabrik" yang dapat dibagikan, CreateTestObject,
Fungsi manufaktur dapat didefinisikan dalam pustaka tautan dinamis atau file objek (.obj), misalnya: Perpustakaan
TestLib; Ekspor CreateTestObject; Function CreateTestObject: StestObject;
stdcall;
Akhir. Setelah pemrosesan seperti itu, ini sekarang dapat digunakan dalam program C ++ yang ditentukan oleh Delphi
Objek panggilan adalah sebagai berikut: Extern "C" StestObject Stdcall
*CreateTestObject (); void
UsetestObject (void) {stestObject *thetestObject = createTestObject ();
*str = thetestObject-> func1 (0);} Saat memanggil fungsi manufaktur createTeTestObject
Ketika sisi Delphi benar -benar menempati ruang instance objek, program C ++ masuk
Setelah semua pemrosesan untuk objek ini selesai, ruang harus dibebaskan.
Tentukan kelas di Delphi, seperti metode bersama yang bebas dari proc1 yang disebutkan di atas, untuk menyelesaikan ini
Satu Tugas: StestObject = ClassProcedure Proc1 (x: Integer);
Abstrak;
stdcall; bebas prosedur;
pelaksanaan…
Prosedur ttestObject.free;
akhir;…
end.2.delphi berbagi objek C ++ biasanya, pemrogram akan mempertimbangkan untuk menggunakan Delphi untuk dikompilasi.
Antarmuka pengguna, sehingga kode Delphi memanggil kode C ++ tampaknya lebih praktis. Sebenarnya, Delphi
Metode implementasi berbagi objek C ++ sangat mirip dengan objek Delphi bersama C ++ di atas. Gunakan hal yang sama
Antarmuka bersama dan Metode Deskripsi Antarmuka Implementasi untuk mendefinisikan kelas C ++: Kelas StestObject
{virtual void proc1 (int x) = 0; virtual char *func1 (int x) = 0;}; kelas
TTestObject: Public StestObject {void proc1 (int x); char *func1 (int
x); void proc2 (); int func2 (); void free ();}; dan kemudian mengimplementasikan metode ini
. Demikian pula, objek C ++ memerlukan fungsi manufaktur yang sesuai.
Ekspor stdcall *createTestObject () {return (StestObject *)
TtestObject.create baru;} Kode Delphi dapat digunakan untuk membuat Function CreateTestObject dengan memanggil CreateTestObject,
Sangat mudah untuk membuat instance di C ++, dapatkan nilai pointer ke instance itu, dan gunakan pointer ini
Nilai untuk memanggil metode bersama dalam objek. Tentu saja, setelah menyelesaikan pemrosesan objek yang relevan,
Jangan lupa menelepon gratis untuk membebaskan ruang yang ditempati.