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 istdas 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.