C++ dll kullanan bir C# projem var. (visual studio 2010'da)
C# kodundan C++ işlevine bir dizi int geçirmeliyim ve C++ kodu, C# koduna geri döndüğünde C# kodu aynı dizi içinde elemanlar ekleyecektir. .
Başlangıçta C# kodunda bir dizi (boyut 10000) olarak bildirildi ve C++ kodu eleman ekleyebiliyor (çünkü bu yalnızca bir dizi int, bellek ayırması aynıydı), ancak sorunlar çalışma zamanı hatası aldım dizinin dışına erişim nedeniyle.
C# dizisine C++ nasıl geçilir ve ek öğelerle C# 'ye geri dönülür?
Boyutu 100000'e kadar artırabilirim ancak yine de C++ kodunun ne kadar eleman ekleyeceğini bilmiyorum (hatta sadece 1 öğe olabilir).
Hem ortak hem de başka bir yol için ortak bir veri yapısı (dinamik dizi) var mı? Visual studio 2010 kullanıyorum.
Böyle bir şey yapmak istiyorum.
PS: derlenmiş kod değil ve burada int dizisi yerine char dizisi kullanılır.
C# kodu
[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++ kod yönetilen ve yönetilmeyen kod Here arasındaki dizilerin aktarılmasında hakkında iyi MSDN makale var
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;
}
Bize bir kod göster –
C++/CLI kullanabilir misiniz? C++/CLI kullanabilir misiniz? –
Öğeleri bir diziye "ekleyemezsiniz". Diziler boyut olarak sabitlenmiştir. Farklı bir veri yapısı kullanın veya ikisi arasında nasıl bir arayüz oluşturduğunuzu değiştirin. –