Tôi đang trong quá trình gói một dự án VC++ 9 không được quản lý trong C++/CLI để sử dụng nó rõ ràng từ một ứng dụng .NET. Tôi biết làm thế nào để viết wrappers, và rằng mã không được quản lý can be executed from .NET, nhưng những gì tôi có thể không hoàn toàn quấn quanh đầu tôi:Có thể chạy C++ không được quản lý bình thường từ một dự án C++/CLI được quản lý không?
Các lib không được quản lý là một C rất phức tạp ++ thư viện và sử dụng rất nhiều nội tuyến và khác các tính năng, vì vậy tôi không thể biên dịch điều này thành
/clr
-marked managed DLL. Tôi cần phải biên dịch này thành một DLL riêng biệt bằng cách sử dụng trình biên dịch VC++ bình thường.Làm cách nào để xuất các ký hiệu từ mã không được quản lý này để mã có thể được sử dụng từ dự án C++/CLI? Tôi có đánh dấu mọi lớp tôi cần hiển thị là
extern
không? Nó đơn giản hay có một số phức tạp hơn?Làm cách nào để truy cập các ký hiệu đã xuất từ dự án C++/CLI? Tôi chỉ cần bao gồm các tệp tiêu đề của mã nguồn không được quản lý và trình liên kết C++ có lấy mã thực tế từ DLL không được quản lý không? Hoặc tôi có phải viết tay một bộ riêng biệt của "extern" các lớp học trong một tập tin tiêu đề mới trỏ đến các lớp học trong DLL?
Khi dự án C++/CLI của tôi tạo các lớp không được quản lý, mã không được quản lý có chạy hoàn toàn tốt trong thời gian chạy VC9 bình thường hay nó sẽ bị buộc phải chạy trong .NET? gây ra vấn đề tương thích nhiều hơn? Dự án C++ tạo ra nhiều trường hợp và có trình thu gom rác được thực hiện tùy chỉnh của riêng mình, tất cả được viết bằng đồng bằng C++, nó là trình kết xuất âm thanh DirectX và quản lý rất nhiều đối tượng DirectX. Tất cả điều này có hoạt động bình thường hoặc chức năng Win32 như vậy có bị ảnh hưởng theo bất kỳ cách nào không?
Có, bạn có thể thực hiện chế độ hỗn hợp. Chỉ cần đánh dấu các tập tin bạn muốn biên dịch như là bản địa, không có tùy chọn '/ clr'. Có một số chỉ thị #pragma để kiểm soát điều này ở cấp chức năng. – leppie