Ein systemeigenes Array kann diesen verwalteten Typ nicht enthalten.



  • Ich bin von c# auf c++ umgestiegen hab ein buch gelesen und habe leider nocht nicht viel praxis erfahrung. Vll könnt ihr mir ja helfen:

    namespace vis{
    [StructLayout(LayoutKind::Sequential)]
    	public value struct Koord	{
    	public:
    	   float X;
    	   float Y;
    	};
    
    class ....{
    Image^ DrawImage(Complex data[10]){
    
    }
    
    }
    

    so und jetzt kommt genau hier Image^ DrawImage(Complex data[10]){ der fehler

    Ein systemeigenes Array kann diesen verwalteten Typ nicht enthalten.
    

    wie kann ich das beheben?



  • Das ist kein C++, sondern C++/CLI !!!



  • heißt was?
    Sorry ich habe native und kein managed gelernt muss aber dringend etwas ganz kleines in managed schreiben.



  • Ein value struct ist ein managed type (value struct ist dasselbe wie struct in C#), du benutzt jedoch native arrays. Wenn du arrays von managed types willst, musst du folglich auch managed arrays verwenden.

    Das funktioniert dann so:

    namespace vis{
    [StructLayout(LayoutKind::Sequential)]
        public value struct Koord    {
        public:
           float X;
           float Y;
        };
    
    class ....{
    Image^ DrawImage(cli::array<Complex> ^data){
    
    }
    
    }
    

    Um einen managed array der Grösse 10 anzulegen, gehst du wie folgt vor:

    cli::array<Complex> ^test = gcnew cli::array<Complex>(10);
    // Alternativ ab Visual C++ 2010:
    auto test = gcnew cli::array<Complex>(10);
    

    MfG



  • ok danke ich versuche das mal. Hätte jedoch nie gedacht, dass hier so große unterschiede zwischen native und managed sind.

    EDIT:
    Ok danke vielmals funktioniert wunderbar. Auf das Forum ist echt verlass. Aber eine Frage noch wie sieht es mit der Geschwindigkeit aus. Wie ist die Rheienfolge der Geschwindigkeit von c#, CLI, c++



  • WIE kommst Du darauf, dass Du *native* entwickelst??????

    Du entwickelst *genau gleich* wie mit C#, nur mit einer anderen Syntax!!!

    Wenn Du "native" Entwicklen willst, dann erstelle *kein* CLR-Projekt!!!

    Und beachte bitte:
    http://blog.kalmbach-software.de/de/2010/03/05/ccli-und-winforms-macht-keinen-sinn/



  • ich sagte ich habe native gelernt jedoch leider so gut wie keine ahnung von cli. Jedoch, dass der code oben kein native ist verstehe ich sehr gut. Ich entwickle nämlich hauptsächlich in c# und kenne deshalb recht gut das .netframework und, dass dieses in native nicht zur verfügung steht ist mir auch klar. Und dass ein clr kein native ist ist mir auch klar. Nur sind mir die code unterschiede zwischen native und managed nicht ganz klar und dachte deshalb, dass ich es als normales array machen könnte, doch nun mache ich es ja praktisch wie in c# mit array<>

    Und in diesem Fall brauche ich c++ auch nur weil ich das einen Teil meines Programms in c++ auslagere und dort ein Bild berechne. Und um dieses gleich als Image zurück zugeben können verwende ich cli. Aber wenn jemand weiß wie man das mit native machen könnte wäre ich ebenfalls sehr dankbar.
    Ebenfalls wäre ich dankbar wenn ihr mir sagen könntet was am schnellsten(leistungseffectivsten) ist um auf ein Handle zu zeichnen?


Anmelden zum Antworten