2010-05-20 48 views

Trả lời

4

Để 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.

http://support.microsoft.com/kb/828736

+0

+1: Tuyệt vời google-fu! Liên kết đó chính xác là những gì Matthew cần. –

+0

@ 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. –

+0

Kudos dude, ngón tay nhanh nhất giành chiến thắng :) –

1

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.

+0

+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

-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. –

+0

Cảm ơn bạn đã trả lời, tôi sẽ sử dụng phương pháp này. :) –

3

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.

  1. 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)

  2. 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)

  3. 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)

  4. 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)

3

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; 
    } 
} 
+0

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. –

+0

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. –

Các vấn đề liên quan