Array Daten von managed nach unmanaged kopieren und zurück **gelöst**
-
Also das geht:
array<unsigned char> ^rgubByteArry; unsigned char c_array[100]; rgubByteArry = gcnew array<unsigned char>(100); Runtime::InteropServices::Marshal::Copy((IntPtr)c_array,rgubByteArry,0,100);
wenn ich nun den arrays andere Datentypen gebe kann ich es nicht kompilieren
array<unsigned short> ^rgusWordArray; unsigned short c_array_us[100]; rgusWordArray = gcnew array<unsigned long>(100); Runtime::InteropServices::Marshal::Copy((IntPtr)c_array_us,rgusWordArray,0,100);
oder
array<unsigned long> ^rgulDWordArray; unsigned short c_array_ul[100]; rgulDWordArray = gcnew array<unsigned short>(100); Runtime::InteropServices::Marshal::Copy((IntPtr)c_array_ul,rgulDWordArray,0,100);
bekomme ich die Meldung:
error C2665: "System::Runtime::InteropServices::Marshal::Copy": Durch keine der 16 Überladungen konnten alle Argumenttypen konvertiert werden.
Wie funktioniert das?
MfG
-
hat keiner eine Idee?
-
Runtime::InteropServices::Marshal::Copy((IntPtr)c_array_ul,rgulDWordArray,0,100);
Du castest einen pointer auf das Array, bei integer arrays musst du aber nicht casten, wenn ich die Syntax richtig verstehe...
SChau mal http://msdn.microsoft.com/de-de/library/ms146629%28VS.80%29.aspx
Grüße Solick
-
Der Cast ist doch nur für den unmanaged zeiger der verursacht den Fehler nicht
Also für DWords klappt es so:
array<unsigned long> ^rgulDWordArray; unsigned short c_array_ul[100]; rgulDWordArray = gcnew array<unsigned short>(100); Runtime::InteropServices::Marshal::Copy((IntPtr)c_array_ul,(array<int> ^)rgulDWordArray,0,100);
für Words müsste es dann so gehen habe es aber noch nicht getestet
array<unsigned short> ^rgusWordArray; unsigned short c_array_us[100]; rgusWordArray = gcnew array<unsigned long>(100); Runtime::InteropServices::Marshal::Copy((IntPtr)c_array_us,(array<short> ^)rgusWordArray,0,100);
MfG