Tôi có một DLL mà tôi đã viết trong C# và tôi muốn sử dụng nó cả với các ứng dụng và ứng dụng C# được viết bằng VC++ không được quản lý. Điều này có thể không?Có thể sử dụng một DLL được tạo bằng C# trong một ứng dụng VC++ không được quản lý không?
Trả lời
Để bổ sung các câu trả lời khác tại đây, đây là bài viết hỗ trợ MS mô tả kịch bản của bạn.
Bạn có thể đặt cụm C# hiển thị với COM và sử dụng theo cách đó.
Trên thuộc tính dự án C# của bạn, trong nút "Thông tin hội họp", chọn "Tạo hiển thị COM".
Có rất nhiều cách để truy cập các đối tượng COM từ Native C++, cách dễ nhất/tốt nhất phụ thuộc vào việc bạn đang làm và cách bạn đang thực hiện.
+1 - đó khá nhiều là nó. COM interop là khá nhiều cách hợp lý duy nhất trong kịch bản này. – TomTom
-1, không có bình luận. . . làm sao có thể? Nếu có gì sai với câu trả lời của tôi, bạn có thể cho tôi biết không? Chúng ta đều ở đây để học, cảm ơn. –
Cảm ơn bạn đã trả lời, tôi sẽ sử dụng phương pháp này. :) –
Có nhiều hơn chỉ là COM interop, các MSDN FAQ cũng liệt kê các phương pháp ít được biết đến:
2,2 Làm thế nào để gọi NET lắp ráp từ Visual C++ mẹ đẻ?
Về cơ bản có bốn phương thức để gọi hội đồng .NET từ mã VC gốc . Microsoft All-In-One Code Framework có các ví dụ hoạt động minh họa các phương pháp.
Gọi mô-đun VC++ gốc CLR Hosting APIs để lưu trữ CLR, tải và gọi hội đồng .NET. (All-In-One Mã khung Sample Code: CppHostCLR)
Nếu assembly .NET có thể được tiếp xúc như là một thành phần COM, có nguồn gốc VC++ mô-đun có thể gọi vào lắp ráp NET qua NET - COM interop. (All-In-One Mã Khung mẫu Code: CppCOMClient)
Xếp PInvoke: các quản lý bản địa gọi đang đi qua một đại biểu mã nguồn gốc có thể gọi lại. (All-In-One Mã Khung mẫu Code: CSPInvokeDll)
Nếu module chứa nguồn gốc VC++ code được phép enable CLR, VC mẹ đẻ ++ mã có thể gọi lắp ráp NET trực tiếp thông qua “Nó Chỉ cần trình ", Hoặc" IJW ", cơ chế. (All-In-One Mã khung Sample Code: CppCLIWrapLib)
Vâng, dường như tôi phải đưa lên unmanaged exports tôi một lần nữa. ;-)
Chỉ trả lời một số similar question 2 ngày trước. Điều này hoàn toàn làm việc trong C#, và nó thậm chí còn tạo ra một file .exp lib & để lắp ráp C# của bạn được tiêu thụ bởi C++:
internal class Sample
{
[DllExport("_export_test", CallingConvention.Cdecl)]
static int Test(int a)
{
return a + 1;
}
}
WOW! Có thật không? Tôi giả định C# cần được đánh dấu là không an toàn? Tôi đã không có ý tưởng frackin bạn có thể làm điều này. –
Việc lắp ráp sẽ chứa các bit không an toàn, nhưng sẽ không được coi là không an toàn khi được sử dụng như .Net lắp ráp, mặc dù. Bạn vẫn có thể sử dụng nó như bình thường x86 hoặc x64 (không AnyCPU) lắp ráp với tất cả các lớp học và các công cụ của bạn. Tuy nhiên, nếu bạn tải nó như một DLL thực, nó sẽ hoạt động như một. Đây là nơi bit không an toàn khởi động. –
- 1. Tạo một C# DLL và sử dụng nó từ không được quản lý C++
- 2. Có thể gọi một DLL được quản lý từ C++ không được quản lý?
- 3. Nhúng dll không được quản lý vào một C# dll
- 4. 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?
- 5. Sử dụng dll C++ được quản lý từ C#
- 6. Chuyển (không được quản lý) C++ sang C# so với sử dụng C++ dưới dạng DLL trong ứng dụng C#
- 7. Liên kết không được quản lý C++ DLL với quản lý C++ lớp thư viện DLL
- 8. Làm cách nào để sử dụng dll C# (được quản lý) mà tôi không có?
- 9. Có thể một assembly C++ được quản lý trả về một đối tượng cho C# không?
- 10. Tiêm DLL được quản lý vào .net 4.0 Ứng dụng
- 11. Không thể xóa dll được quản lý sau khi sử dụng nó trong ứng dụng web asp.net
- 12. Sự cố không được quản lý - giải quyết sự cố mã không được quản lý trong một ứng dụng .NET bằng cách sử dụng WinDbg
- 13. Chuyển chuỗi C# vào một DLL C không được quản lý trong Windows Mobile
- 14. WinSxS không tải được VC++ DLL
- 15. Gọi một dll C++ (mã không được quản lý) từ dịch vụ C# windows (được viết bằng mã được quản lý)
- 16. EEFileLoadException Khi tải C++ DLL trong DLL được quản lý
- 17. Cách sử dụng mã được quản lý từ mã không được quản lý?
- 18. Sử dụng thuật toán nào: Thuật toán băm được quản lý và không được quản lý
- 19. Làm thế nào để sử dụng C# dll trong vC++?
- 20. Cách tạo DLL sẽ được sử dụng trong C#
- 21. Cách chỉ định một NIC cụ thể được sử dụng trong một ứng dụng được viết bằng C++ (boost asio)
- 22. Sử dụng các thuộc tính C# trong mã C++ không được quản lý
- 23. Hiệu suất của việc gọi mã không được quản lý từ mã được quản lý
- 24. Có thể Delphi chỉ sử dụng một .dll nếu được yêu cầu không?
- 25. Thuộc tính DllImport luôn tải DLL không được quản lý
- 26. Mùa xuân - Có thể sử dụng nhiều người quản lý giao dịch trong cùng một ứng dụng không?
- 27. Hủy bỏ cuộc gọi không được quản lý DLL
- 28. Có thể tham khảo một DLL COM trong một dự án được quản lý bằng đường dẫn chứ không phải bởi GUID không?
- 29. Làm thế nào để gọi hàm COM DLL (trong VC++) từ ứng dụng VC++ .EXE?
- 30. Visual C++ Mã không được quản lý: Sử dụng/EHa hoặc/EHsc cho ngoại lệ C++?
+1: Tuyệt vời google-fu! Liên kết đó chính xác là những gì Matthew cần. –
@ Binary Worrier - Tôi đã lo lắng tôi sẽ bước trên ngón chân của bạn với các liên kết ở trên, vì nó trông giống như bạn đã về để chỉnh sửa câu trả lời của bạn. –
Kudos dude, ngón tay nhanh nhất giành chiến thắng :) –