Assembler in managed C++



  • Hi,
    ich will ein Programm schreiben welches zur einarbeitung des auslesen von Prozessordaten helfen soll.
    hierzu brauche ich natürlich Assembler.
    Wie bekomme ich diesen bei managed C++ zum laufen?



  • Kannst Du nicht einfach eine unmanaged Klasse verwenden? Da muesstest Du doch alle Freiheiten haben.



  • Fonce schrieb:

    ich will ein Programm schreiben welches zur einarbeitung des auslesen von Prozessordaten helfen soll.

    Ich verstehe den Satz nicht?

    WAS ist Dein Problem?



  • @Jochen Kalmbach
    mehr als den ersten Satz gelesen?

    @witte
    Wie kann ich den eine unmanged Klasse verwenden bzw. erzeugen?



  • Fonce schrieb:

    @Jochen Kalmbach
    mehr als den ersten Satz gelesen?

    @witte
    Wie kann ich den eine unmanged Klasse verwenden bzw. erzeugen?

    wie das bei native C++ so geht halt...

    class MeinAssembler
    {
    //...
    };
    


  • ich verstehe immer nur noch Bahnhof...

    void Test()
    {
      __asm
      {
      }
    }
    

    Was soll daran nicht gehen?



  • Jochen Kalmbach schrieb:

    ich verstehe immer nur noch Bahnhof...

    void Test()
    {
      __asm
      {
      }
    }
    

    Was soll daran nicht gehen?

    weil er mir immer ehler ausgibt das ich unmanaged Code nicht in managed code einbinden kann vieleicht!!! 🙄



  • Vielleicht Postest Du mal Fehlermeldungen - Hellsehen kann hier keiner und geht nicht ist keine Fehlerbeschreibung.



  • Schreib die Funktion als *Funktion* und nicht als Methode in einer ref-Klasse. Oder eben als Methode in einer "nicht-ref"-Klasse...



  • Fonce schrieb:

    weil er mir immer ehler ausgibt das ich unmanaged Code nicht in managed code einbinden kann vieleicht!!! 🙄

    Da gibt's in den Projekteinstellungen einen Compilerschalter. Glaub ich. Frag mich aber jetzt bitte nicht wie der heißt.



  • Also nochmal für alle, die nicht selber in der Hilfe nachschauen mögen 😃

    using namespace System;
    
    int asm_add(int a,
                int b)
    {
        __asm
        {
            mov eax, a
            add eax, b
        }
    }
    
    int main()
    {
        Console::WriteLine(L"So geht das: {0}",
                           asm_add(2, 3));
        return 0;
    }
    

    Bei mir kompiliert das mit einer Warnung ("warning C4793: 'asm_add' : function compiled as native"). Aber es kompiliert und funktioniert. Die Warnung bekommst du, weil der Compiler zuerst versucht die Funktion als managed zu kompilieren, was natürlich nicht geht weil der Assembler native Code forciert. Um die Warnung auszuschalten musst du dem Compiler mitteilen, dass diese Funktion als native kompiliert werden muss. Wenn du das in der gleichen Compilation Unit machen willst, dann geht das wie folgt:

    using namespace System;
    
    #pragma managed (push, off)
    
    int asm_add(int a,
                int b)
    {
        __asm
        {
            mov eax, a
            add eax, b
        }
    }
    
    #pragma managed (pop)
    
    int main()
    {
        Console::WriteLine(L"So geht das: {0}",
                           asm_add(2, 3));
        return 0;
    }
    

Anmelden zum Antworten