Có vẻ như phải có câu hỏi trùng lặp, nhưng tôi chưa thể tìm thấy câu hỏi đó.Chuyển int bằng tham chiếu từ C++/CLI tới C#
Tôi đang viết một cây cầu để cho phép một chương trình C cũ truy cập một số đối tượng C#. Cây cầu được viết bằng C++/CLI.
Trong một trường hợp có một hàm C# đó là định nghĩa là:
public static string GetNameAndValue(out int value);
C My ++/CLI wrapper chức năng:
char* GetNameAndValue(int* value);
Đó là đủ dễ dàng để gọi từ C. Nhưng làm cách nào để gọi phương thức C# từ C++/CLI?
đầu tiên tôi đã cố gắng rõ ràng:
String^str;
str = TheObject::GetNameAndValue(value);
Đó mang lại cho tôi lỗi C2664: Không thể chuyển đổi thông số 2 từ 'int *' thành 'int%'.
OK, sau đó, khoảng GetNameAndValue(%value)
? Điều đó mang lại cho tôi lỗi C3071: toán tử '%' chỉ có thể được áp dụng cho một cá thể của một lớp ref hoặc một kiểu giá trị.
Đủ công bằng. Vì vậy, nếu tôi tạo ra một int
tôi có thể vượt qua nó với %
??
int foo;
str = TheObject::GetNameAndValue(%ix);
Không súc sắc. C3071 một lần nữa. Mà tôi thấy kỳ lạ bởi vì int
chắc chắn là một loại giá trị. Hoặc là nó?
Phải có một số kết hợp ma thuật của%, ^, &, hoặc một số khác khiêu dâm sẽ làm những gì tôi muốn, nhưng sau khi thề tại điều này trong 30 phút tôi stumped. Và tìm kiếm các kết hợp khác nhau của C++/CLI và C# chủ yếu cung cấp thông tin về cách gọi C++ từ C#.
SO, câu hỏi của tôi: Làm thế nào để bạn vượt qua một int
từ C++/CLI đến một phương pháp C# mà mong đợi một out int
(hoặc ref int
, nếu tôi phải)?
Bạn đã có những điều ngược lại. C++/CLI là khá vô dụng để cho phép một chương trình C gọi một phương thức C#.Nó là một phần mở rộng ngôn ngữ đã được thực hiện để đi theo cách khác, từ mã được quản lý để mã nguồn gốc. Chạy mã được quản lý từ một chương trình gốc đòi hỏi nhiều vũ khí lớn hơn, nó phải nạp và khởi tạo CLR trước. Sẽ mất hơn 30 phút để sắp xếp. –
@ HansPassant: Đó không phải là trải nghiệm của tôi trong thời gian ngắn tôi đã làm việc với điều này. Chương trình C của tôi gọi một DLL đã được biên dịch bằng C++/CLI, mà lần lượt gọi mã C# trong một assembly khác. Hoạt động khá tốt. Như tôi đã hiểu, DLL C++/CLI tải thời gian chạy. Dù thế nào đi nữa, tôi đã có thể lấy thông tin từ mã C# về mã C. –
C++/CLI hỗ trợ __declspec (dllexport), đó là kịch bản duy nhất tôi có thể nghĩ đến nơi bạn có thể có may mắn với nó. Cùng một ý tưởng như hack [DllExport] của Giesecke. Khi được đăng, câu hỏi của bạn có ý nghĩa rất ít đối với tôi và các vấn đề bạn đang gặp là hoàn toàn bình thường. Chúc may mắn với điều đó. –