2008-11-10 4 views
6

Có cách nào để tạo các đối tượng C# và các phương thức gọi từ C++ không được quản lý, nhưng không sử dụng COM Iterop? Tôi đang tìm kiếm một cái gì đó như JNI (nhưng đối với. Net), nơi bạn có thể tự tạo VM, tạo đối tượng, v.v.Gọi phương thức C# từ C++ mà không cần sử dụng COM

+0

Regular C++ hoặc C++ được quản lý? –

Trả lời

6

Nếu bạn đang sử dụng C++/CLI thì bạn có thể tương tác trực tiếp với cả thế giới được quản lý và mã không được quản lý, do đó, interop là tầm thường.

Bạn cũng có thể lưu trữ CLR cho mình và trong khi API lưu trữ là COM, bạn có thể tạo bất kỳ đối tượng được quản lý nào. Quá trình này không khó khăn vì có vẻ như một vài cuộc gọi API đóng gói rất nhiều chức năng. Có rất nhiều thông tin trực tuyến, ví dụ tài liệu MSDN trên "Hosting the Common Language Runtime".

1

Bạn có thể quyết định tệp theo tệp trong dự án C++ của mình có sử dụng managed C++ hay không . Hãy thử thay đổi các thiết lập một tập tin trong dự án của bạn để nó biên dịch như được quản lý. Đặt các cuộc gọi đến đối tượng C# của bạn.

Có chi phí để vượt qua biên giới C++/C#, vì vậy bạn nên phân tích nơi cần thực hiện. Giống như, bạn sẽ không muốn làm điều đó bên trong một vòng lặp.

3

Có một cách "không có giấy tờ" phần nào xuất ra API kiểu C từ lớp/phương thức .NET.

Điều này cuối cùng dẫn đến một tình huống mà một dll .NET đã xuất các API có thể được gọi từ C/C++ hoặc bất kỳ thứ gì có thể tiêu thụ .DLLs cho vấn đề đó.

Nếu bạn là thành "đọc" (Beh;), bạn có thể nhận được một cuốn sách gọi là: Inside Microsoft® .NET IL Assembler nơi bạn sẽ tìm thấy kỹ thuật này trong chương 15: "Phương pháp quản lý như xuất khẩu không được quản lý"

Ngoài ra còn có một ví dụ tốt đẹp dự án về dự án mã bạn có thể sử dụng làm điểm bắt đầu cho môi trường 32 bit: http://www.codeproject.com/KB/dotnet/DllExport.aspx

1

Tôi là tác giả của jni4net, cầu nội bộ nguồn mở giữa JVM và CLR. Nó được xây dựng trên đầu trang của JNI và PInvoke. Không cần mã C/C++. Tôi hy vọng nó sẽ giúp bạn.