Ok, hướng dẫn. Bạn có lớp C++ NativeClass
mà bạn muốn hiển thị với C#.
class NativeClass {
public:
void Method();
};
1) Tạo dự án C++/CLI. Liên kết tới thư viện và tiêu đề C++ của bạn.
2) Tạo lớp trình bao bọc hiển thị các phương pháp bạn muốn. Ví dụ:
#include "NativeClass.h"
public ref class NativeClassWrapper {
NativeClass* m_nativeClass;
public:
NativeClassWrapper() { m_nativeClass = new NativeClass(); }
~NativeClassWrapper() { this->!NativeClassWrapper(); }
!NativeClassWrapper() { delete m_nativeClass; }
void Method() {
m_nativeClass->Method();
}
};
3) Thêm tham chiếu vào dự án C++/CLI trong dự án C# của bạn.
4) Sử dụng các loại wrapper trong một tuyên bố sử dụng:
using (var nativeObject = new NativeClassWrapper()) {
nativeObject.Method();
}
Những tuyên bố sử dụng đảm bảo Dispose() được gọi, mà ngay lập tức chạy destructor và phá hủy các đối tượng bẩm sinh. Bạn sẽ bị rò rỉ bộ nhớ và có lẽ sẽ chết khủng khiếp (không phải bạn, chương trình). Lưu ý: The Dispose() method is magically created for you.
Các lớp trình bao bọc có được công khai không? Tuyên bố phải là "lớp ref công khai {...};" – Asik
Tôi biết điều đó. Những gì tôi yêu cầu là một điều như vậy có thể: 'lớp ref công khai wrapper_class = native_class;'? Có phải các phương pháp như vậy có thể? – Haix64
Nó không phải là đơn giản. Lớp wrapper sẽ lưu trữ một đối tượng native_class và tạo các phương thức wrapper cho tất cả các phương thức của native_class mà bạn muốn trưng ra. Các phương thức wrapper chỉ sắp xếp các tham số và ủy quyền cuộc gọi đến đối tượng native_class. – Asik