Salah satu cara mudah untuk memanggil ke C ++ adalah dengan membuat perakitan pembungkus di C ++ / CLI. Dalam C ++ / CLI Anda dapat memanggil kode yang tidak dikelola seolah-olah Anda sedang menulis kode asli, tetapi Anda dapat memanggil kode C ++ / CLI dari C # seolah-olah itu ditulis dalam C #. Bahasa ini pada dasarnya dirancang dengan interop ke perpustakaan yang ada sebagai "aplikasi pembunuh" -nya.
P / Invoke adalah teknologi yang bagus, dan bekerja dengan cukup baik, kecuali untuk masalah dalam memuat file DLL target. Kami telah menemukan bahwa cara terbaik untuk melakukan sesuatu adalah dengan membuat pustaka statis dari fungsi asli dan menautkannya ke proyek Managed C ++ (atau C ++ / CLI) yang bergantung padanya.
Teknologi yang digunakan untuk melakukan ini disebut P / Invoke ; Anda dapat mencari artikel tentang subjek tersebut. Perhatikan bahwa ini untuk memanggil C dari C #, bukan C ++. Jadi, Anda harus membungkus kode C ++ Anda dalam pembungkus C yang diekspor DLL Anda.
Jawaban:
Salah satu cara mudah untuk memanggil ke C ++ adalah dengan membuat perakitan pembungkus di C ++ / CLI. Dalam C ++ / CLI Anda dapat memanggil kode yang tidak dikelola seolah-olah Anda sedang menulis kode asli, tetapi Anda dapat memanggil kode C ++ / CLI dari C # seolah-olah itu ditulis dalam C #. Bahasa ini pada dasarnya dirancang dengan interop ke perpustakaan yang ada sebagai "aplikasi pembunuh" -nya.
Misalnya - kompilasi ini dengan sakelar / clr
#include "NativeType.h" public ref class ManagedType { NativeType* NativePtr; public: ManagedType() : NativePtr(new NativeType()) {} ~ManagedType() { delete NativePtr; } void ManagedMethod() { NativePtr->NativeMethod(); } };
Kemudian di C #, tambahkan referensi ke perakitan ManagedType Anda, dan gunakan seperti ini:
ManagedType mt = new ManagedType(); mt.ManagedMethod();
Lihat posting blog ini untuk contoh yang lebih dijelaskan.
sumber
P / Invoke adalah teknologi yang bagus, dan bekerja dengan cukup baik, kecuali untuk masalah dalam memuat file DLL target. Kami telah menemukan bahwa cara terbaik untuk melakukan sesuatu adalah dengan membuat pustaka statis dari fungsi asli dan menautkannya ke proyek Managed C ++ (atau C ++ / CLI) yang bergantung padanya.
sumber
Saya tidak begitu paham dengan perpustakaan yang Anda sebutkan, tetapi secara umum ada beberapa cara untuk melakukannya:
sumber
Ya, ini disebut P / Invoke .
Berikut adalah situs sumber daya yang bagus untuk menggunakannya dengan Win32 API:
http://www.pinvoke.net/
sumber
Tentu. Artikel ini adalah contoh bagus tentang sesuatu yang dapat Anda lakukan untuk memulai ini.
Kami melakukan ini dari C # pada perangkat Windows Mobile kami menggunakan P / Invoke .
sumber
Teknologi yang digunakan untuk melakukan ini disebut P / Invoke ; Anda dapat mencari artikel tentang subjek tersebut. Perhatikan bahwa ini untuk memanggil C dari C #, bukan C ++. Jadi, Anda harus membungkus kode C ++ Anda dalam pembungkus C yang diekspor DLL Anda.
sumber
Sudahkah Anda mempertimbangkan Apache Thrift?
http://thrift.apache.org/
Sepertinya solusi yang sangat rapi.
sumber