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


Anmelden zum Antworten