Dışa aktarılan C++ DLL dosyasından C# programıma bir dizinin nasıl döndürüleceğini anlayamıyorum. Googling'ten bulduğum tek şey diziyi bir arabelleğe kopyalamak için Marshal.Copy() kullanıyordu, ama bu bana geri vermeye çalıştığım değerleri vermiyor, bana ne verdiğini bilmiyorum. İşte C++ dizgesini döndür C#
ben çalışıyorum budur:Dışa fonksiyonu:
extern "C" __declspec(dllexport) int* Test()
{
int arr[] = {1,2,3,4,5};
return arr;
}
C# kısmı:
[DllImport("Dump.dll")]
public extern static int[] test();
static void Main(string[] args)
{
Console.WriteLine(test()[0]);
Console.ReadKey();
}
ben döndürme türü int [] çünkü muhtemelen yanlış olduğunu biliyorum yönetilen/yönetilmeyen farklılıklar, buradan nereye gideceğimi bilmiyorum. Ben hiçbir şey için bir cevap bulmak için görünmüyor, ancak tamsayı dizileri değil karakter dizileri dizelere döndürüyor.
Marshal.Copy ile elde ettiğim değerlerin neden dönmediğimi anladım çünkü dışa aktarılan işlevdeki 'arr' dizisi silindi, ancak% 100 emin değilim Bunu temizleyebilir, bu harika olurdu.
http://stackoverflow.com/questions/3776485/marshal-c-int-array-to-c-sharp Bu –
size yardımcı olabilecek [iyi değil.] (Http://stackoverflow.com/questions/6441218/can-a-local-variables-memory-be-accessed-out-onun-kapsamı) – chris
Teşekkürler Chris, ben bu kadar yakalanmıştım ne yaptığımı unuttum. Kodumu biraz değiştireceğim, bu şekilde ihraç ettiğim fonksiyonun arabelleğe girmesini ve arabayı oradan dolduracağım. – David