2013-01-08 25 views
5

Tôi đang cố gọi một thư viện C++ hiện có từ ứng dụng C# bằng cách sử dụng lớp xen kẽ C++/CLI. Tôi có hàm C++ trông giống như sau:Hệ thống :: IntPtr tới int * trong C++/CLI

void doSomething(int* foo, int size); 

Và đối tượng C# chứa hai trường, bắt đầu IntPtr và kích thước int. Tôi đã viết một lớp C++ quản lý mà trông như thế này:

public ref class Wrapper { 
public: 
    void run(System::IntPtr itn, int size); 
}; 

Và bây giờ tôi muốn gọi doSomething trong Wrapper :: chạy, và có doSomething có quyền truy cập vào cùng một khối dữ liệu mà điểm C đối tượng # để. Là những gì tôi đang cố gắng để làm có thể mà không có một bản sao, và nếu như vậy, làm thế nào?

+0

Chắc chắn bạn có nghĩa là để viết mà là 'void run (int% ITN, int size) '? Nếu không thì bộ nhớ cần được ai đó ghim. Do ** not ** bỏ qua yêu cầu đó, tốt nhất nên làm điều đó trong C++/CLI với pin_ptr <> để mã C# có thể đơn giản sử dụng int []. –

+0

Xin lỗi, tôi mới sử dụng CLI và C#, tôi gần như quen thuộc với C++ và C. Bộ nhớ ghim làm gì? –

Trả lời

3

Để gọi doSomething từ Wrapper :: chạy, hãy thử casting sự trở lại của System::IntPtr::ToPointer, như vậy:

doSomething(reinterpret_cast<int*>(itn.ToPointer()), size); 
Các vấn đề liên quan