C++ AnsiString->Char* ChatPacket..

09/07/2011 10:16 SandMann016#1
Hi,
ich benutze den Embarcadero C++ Builder XE und möchte für das Spiel Metin2 einen Chat-Spambot erstellen...
das ganze Packet läuft so ab:

Code:
int modus = 0;//normale Chat
char* msg = "halllo";
__asm
{
        MOV ECX, ChatInputAddresse
        PUSH msg
        PUSH modus
       CALL ChatCallAddresse
}

so sieht man im chat "halllo" ...das klappt also und nun will ich das man den Text durch eine EditBox festlegen kann.
Die editbox ist ja im AnsiString Format aber asm unterstützt nur char ...
Nun meine frage wie soll ich den text umwandeln, sodass ich den text von der Edit11->Text im chat sehe...

Eigentlich wandelt man einen AnsiString in Char* so um:
Code:
AnsiString strText = AnsiString(Edit11->Text.c_str());
char *ch = new char[strText.Length()+1];
strcpy(ch, strText.c_str());
aber leider wenn ich
Chat(ch, 0);
ausführe passiert nichts... das packet wird nicht gesendet! ;(
Aber wie kann ich es machen das es geht...


Mfg.SandMann016
09/07/2011 19:31 .ErpeL#2
Es tut mir leid Ihnen mitteilen zu müssen, dass Ihre Chat Funtion falsch ist, bzw. die Parameter falsch angeordnet wurden. Anbei ein Beispiel wie es Funktionieren könnte.

PHP Code:
void SendChatPacket(String Messageint Code)
{
    
DWORD ClassAddy= *(DWORD*)0x61C028;
    
DWORD Address1 0x41A810;
    
DWORD Address2 0x5204C0;
    
char  *msg AnsiString(Message).c_str();

    
__asm
    
{
        
MOV ECX,ClassAddy
        PUSH Code
        PUSH msg
        CALL Address1
        CALL Address2
    
}
}

//Aufruf:
SendChatPacket(Edit1->Text,0); 
09/07/2011 19:33 SandMann016#3
Da hast du dir aber echt ein THX verdient :O
09/07/2011 19:43 ms​#4
Quote:
Originally Posted by .ErpeL View Post
Es tut mir leid Ihnen mitteilen zu müssen, dass Ihre Chat Funtion falsch ist, bzw. die Parameter falsch angeordnet wurden. Anbei ein Beispiel wie es Funktionieren könnte.
Nö, wenn der Aufruf der Chat-Funktion erfolgreich ist, dann stimmt offensichtlich auch der Stack Frame. Man muss nur die 2. Zeile umändern.

Code:
char* msg = Edit11->Text.c_str();
09/07/2011 20:00 .ErpeL#5
Quote:
Originally Posted by Metin2Spieler97 View Post
Nö, wenn der Aufruf der Chat-Funktion erfolgreich ist, dann stimmt offensichtlich auch der Stack Frame. Man muss nur die 2. Zeile umändern.

Code:
char* msg = Edit11->Text.c_str();
Man kann einen wide character string (wchar_t*), welcher Daten im Unicode Zeichensatz beinhaltet nicht ohne weiteres einem AnsiString (char*) zuweisen. Deshalb erfolgt zuvor eine Umwandlung in letzeren.
09/07/2011 20:03 ms​#6
Quote:
Originally Posted by .ErpeL View Post
Man kann einen wide character string (wchar_t*), welcher Daten im Unicode Zeichensatz beinhaltet nicht ohne weiteres einem AnsiString (char*) zuweisen. Deshalb erfolgt zuvor eine Umwandlung in letzeren.
c_str() returnt für gewöhnlich auch den Typ char*.
09/07/2011 20:13 .ErpeL#7
Quote:
Originally Posted by Metin2Spieler97 View Post
c_str() returnt für gewöhnlich auch den Typ char*.
Jo das war bei den alten C++ Buildern so aber ab C++ Builder XE gibt .c_str() bei einem UnicodeString wchar_t* zurück, warum auch immer.