2011-10-20 41 views
10

Tôi có một ứng dụng biểu mẫu cửa sổ được viết bằng C++/cli. Tôi muốn mở rộng ứng dụng này với một số biểu mẫu mới và tôi muốn tạo chúng trong C# trong một dự án riêng biệt.tương tác giữa dự án C# và dự án C++ trong cùng một giải pháp

Có thể chỉ cần thêm dự án C# vào một giải pháp có dự án C++ và cả hai sẽ tương tác? Bằng cách tương tác, tôi có nghĩa là, một nút bấm vào một biểu mẫu được viết trong dự án C# sẽ có thể gọi các phương thức trong dự án C++. Khi được hỏi có lẽ theo một cách khác, một đối tượng trong dự án C# có thể tham khảo một đối tượng trong dự án C++ không? nếu có, bạn có biết mã ví dụ để tôi bắt đầu không?

Cảm ơn.

Trả lời

5

Có. Ứng dụng C++/CLI sẽ có thể giao tiếp với ứng dụng C#, theo một trong hai cách:

Nếu bạn đang sử dụng phần mở rộng CLI (từ bài đăng của bạn có vẻ như nó), bạn sẽ có thể viết mã bằng các tài liệu tham khảo đối tượng mới:

Managed đối tượng: System::String^ myString (trong C++) cũng giống như string myString trong C# refs Managed: System::String% myString tương đương với ref string myString.

Nếu bạn muốn sử dụng kiểu gốc C++, thì bạn sẽ phải sử dụng P/Invoke, nhưng đó là một danh mục hoàn toàn khác. Đối với những gì bạn muốn làm, chỉ cần thêm dự án C++ làm tham chiếu đến dự án C# của bạn, viết một lớp hiển thị công khai trong C++ bằng cách sử dụng các kiểu được quản lý và sau đó biên dịch. Dự án của bạn sau đó sẽ được hiển thị cho lớp C# của bạn trong bất kỳ vùng tên nào bạn đã chọn cho lớp C++.

EDIT: oh, và nếu bạn cần phân bổ các đối tượng được quản lý thông qua C++, bạn sẽ cần phải sử dụng gcnew thay vì new.

1

Điều này có thể được thực hiện bằng cách biên dịch một dll bằng dự án C++, sau đó tải ứng dụng C# vào dll và sau đó nó sẽ có thể gọi các hàm được xuất của nó. Phương thức này cho phép mã C++ của bạn là mã không được quản lý.

Theo như tìm kiếm một mẫu mà đã được thiết lập, tôi chỉ có thể tìm thấy một Visual Studio 2008 dự án: Microsoft All-In-One Code Framework

Đối với visual studio 2010, dưới đây là cách để làm C++ bên: How to make a dll with C++ Using Explicit PInvoke in C++

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