Tôi có một dự án C# đang sử dụng một dll C++. (trong visual studio 2010)
Tôi phải truyền một mảng int từ mã C# tới hàm C++ và hàm C++ sẽ thêm vài phần tử vào mảng, khi điều khiển quay lại mã C#, mã C# cũng sẽ thêm các phần tử trong cùng mảng . Ban đầu tôi tuyên bố một mảng (kích thước 10000) trong mã C# và mã C++ có thể thêm phần tử (vì nó chỉ là một mảng int, cấp phát bộ nhớ giống nhau), nhưng vấn đề là tôi đã gặp lỗi thời gian chạy do truy cập bên ngoài mảng.
Làm thế nào để vượt qua mảng C# tới C++ và trả về C# với các mục bổ sung?
Tôi có thể tăng kích thước lên 100000 nhưng một lần nữa tôi không biết có bao nhiêu phần tử mã C++ sẽ thêm (thậm chí nó có thể chỉ là 1 phần tử).
Vì vậy, có cấu trúc dữ liệu chung (mảng động) tồn tại cho cả hai hoặc cách khác để thực hiện? Tôi đang sử dụng Visual studio 2010.
Một cái gì đó như thế này tôi muốn làm.
PS: không được biên dịch mã, và ở đây tôi sử dụng mảng char thay vì mảng int.
C# code
[DllImport("example1.dll")]
private static extern int fnCPP (StringBuilder a,int size)
...
private void fnCSHARP(){
StringBuilder buff = new StringBuilder(10000);
int size=0;
size = fnCPP (buff,size);
int x = someCSHARP_fu();
for (int i=size; i < x+size; i++) buff[i]='x';// possibility of run time error
}
C++
int fnCPP (char *a,int size){
int x = someOtherCpp_Function();
for(int i=size; i < x+size ; i++) a[ i ] = 'x'; //possibility of run time error
return size+x;
}
Hiển thị cho chúng tôi mã số –
Bạn có thể sử dụng C++/CLI không? Bạn có thể sử dụng C++/CLI không? –
Bạn không thể "thêm" các mục vào một mảng. Mảng được cố định kích thước. Sử dụng cấu trúc dữ liệu khác hoặc thay đổi cách bạn giao tiếp giữa hai cấu trúc này. –