Wo liegt hier der Fehler?



  • Hi also ich will einen Quellcode compilen
    Leider bekomm ich einen Fehler den ich nicht zu umgehen weiss
    Ein Kumpel von mir kanns ganz normal compilen vielleicht liegt es an meinem Ide (Use codeblocks falls einer kennt)
    Hier ist der code:
    Achja es ist ein dll projekt.

    #include <windows.h>
    #include <stdio.h>

    void SendGAMEPacket(BYTE* Packet,DWORD PacketSize) {
    DWORD size1 = PacketSize;
    __asm {
    pushad
    mov eax, Packet
    push Packet
    mov ebx, size1
    mov edx, 0x6FB0DE40 // Oldone for 1.11 0x6FB23260
    call edx
    popad
    }
    }

    BYTE Text[10] = {0x15,0x01,0x00,0x54,0x65,0x73,0x74,0x00,0x00,0x00};

    BOOL WINAPI DllMain(HINSTANCE hDll,DWORD dwReason,LPVOID lpReserved) {
    switch (dwReason)
    {
    case DLL_PROCESS_ATTACH:
    SendGAMEPacket(Text,sizeof(Text));
    break;
    }
    return TRUE;
    }

    Könnt ihr mal versuchen ob ihr des compilet bekommt?
    Wenn ja könnt ihr mir sagen welchen Ide ihr benutzt?
    Oder liegt da einfach nurn Fehler
    Wäre nett für schnelle Hilfe



  • 1. Bitte CPP-Tags benutzen, da sieht der Code übersichtlicher aus
    2. Dürfen wir jetzt raten, WELCHER Fehler da kommt?
    3. Ich tippe auf den Assambler-Code - da gibt es afaik keine Standards, womit ein Inline-Assambler zurechtkommen muß.



  • Ahja sry natürlich vergessen
    er sagt das hier die Zeile:
    __asm {
    nicht definiert ist



  • Aginme schrieb:

    Ahja sry natürlich vergessen
    er sagt das hier die Zeile:
    __asm {
    nicht definiert ist

    das ist zu erwarten. der mingw g++ compiler, den codeblocks benutzt, hat eine andere syntax für inline assembler als der microsoft compiler, den dein kumpel benutzt. generell ist derartiger code zwischen verschiedenen compilern nicht austauschbar. es ist im übrigen kein ISO C++ problem.



  • Du verwendest bei deinem codeblocks bestimmt mingw, dann darfst dich schonmal auf ne "schöne" ASM-Syntax einstellen.

    http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html



  • Versuch mal deinem Compiler, falls es MinGW ist, den Schalter -masm=intel mitzugeben. Dann sollte er auch Intel Syntax akzeptieren. Allerdings sieht die Einbettung in den C++ Quellcode etwas anders aus, da der GCC es standardkonform macht. Die kurze Sequenz würde dann zB wie folgt aussehen:

    asm
    (
        "pushad\n"
        "mov eax, Packet\n"
        "push Packet\n"
        "mov ebx, size1\n"
        "mov edx, 0x6FB0DE40\n"
        "call edx\n"
        "popad\n"
    )
    

    Allerdings vermute ich mal, dass du innerhalb der Assembler Anweisungen nicht einfach so externe Bezeichner verwenden kannst. Evtl. bist du mit der AT&T Syntax da besser beraten. Du kannst das ja mit einem Compiler Switch variabel halten.

    #ifdef __GNUC__
    asm
    (
        // hier kommt die Sequenz in AT&T Syntax hin
    )
    #else
        // Intel Syntax
    __asm
    {
        pushad
        mov eax, Packet
        push Packet
        mov ebx, size1
        mov edx, 0x6FB0DE40 // Oldone for 1.11 0x6FB23260
        call edx
        popad
    }
    #endif
    


  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Compiler-Forum verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten