เป็นไปได้หรือไม่ที่จะเรียกรหัส C ++ ซึ่งอาจรวบรวมเป็นไฟล์ไลบรารีโค้ด (.dll) จากภายในภาษา. NET เช่น C #
โดยเฉพาะรหัส C ++ เช่นไลบรารีเครือข่าย RakNet
เป็นไปได้หรือไม่ที่จะเรียกรหัส C ++ ซึ่งอาจรวบรวมเป็นไฟล์ไลบรารีโค้ด (.dll) จากภายในภาษา. NET เช่น C #
โดยเฉพาะรหัส C ++ เช่นไลบรารีเครือข่าย RakNet
คำตอบ:
วิธีง่ายๆอย่างหนึ่งในการเรียกเข้าสู่ C ++ คือการสร้างชุดตัวห่อใน C ++ / CLI ใน C ++ / CLI คุณสามารถเรียกใช้โค้ดที่ไม่มีการจัดการได้ราวกับว่าคุณกำลังเขียนโค้ดเนทีฟ แต่คุณสามารถเรียกใช้โค้ด C ++ / CLI จาก C # ได้ราวกับว่ามันถูกเขียนด้วย C # โดยพื้นฐานแล้วภาษาได้รับการออกแบบโดยใช้การทำงานร่วมกันในไลบรารีที่มีอยู่เป็น "แอปนักฆ่า"
ตัวอย่างเช่น - รวบรวมสิ่งนี้ด้วยสวิตช์ / clr
#include "NativeType.h"
public ref class ManagedType
{
NativeType* NativePtr;
public:
ManagedType() : NativePtr(new NativeType()) {}
~ManagedType() { delete NativePtr; }
void ManagedMethod()
{ NativePtr->NativeMethod(); }
};
จากนั้นใน C # ให้เพิ่มการอ้างอิงไปยังแอสเซมบลี ManagedType ของคุณและใช้มันดังนี้:
ManagedType mt = new ManagedType();
mt.ManagedMethod();
ดูบทความในบล็อกนี้เพื่อดูตัวอย่างที่อธิบายเพิ่มเติม
P / Invoke เป็นเทคโนโลยีที่ดีและทำงานได้ค่อนข้างดียกเว้นปัญหาในการโหลดไฟล์ DLL เป้าหมาย เราพบว่าวิธีที่ดีที่สุดในการทำสิ่งต่างๆคือการสร้างไลบรารีแบบคงที่ของฟังก์ชันเนทีฟและเชื่อมโยงไปยังโปรเจ็กต์ C ++ ที่มีการจัดการ (หรือ C ++ / CLI) ที่ขึ้นอยู่กับมัน
ฉันไม่คุ้นเคยกับห้องสมุดที่คุณพูดถึง แต่โดยทั่วไปมีสองวิธีในการดำเนินการดังต่อไปนี้:
ใช่เรียกว่าP / Invoke P
นี่คือแหล่งข้อมูลที่ยอดเยี่ยมสำหรับการใช้งานกับ Win32 API:
เทคโนโลยีที่ใช้ในการทำเช่นนี้เรียกว่าP / Invoke ; คุณสามารถค้นหาบทความเกี่ยวกับเรื่องนี้ โปรดทราบว่ามีไว้สำหรับการเรียก C จาก C # ไม่ใช่ C ++ มากนัก ดังนั้นคุณจะต้องห่อรหัส C ++ ของคุณใน C wrapper ที่ DLL ของคุณส่งออก