LOL wenn ich die Funktion unverändert in eine dll kopieren geht sie nicht mehr???



  • Hallo,
    ich schlage mich gerade mit einem sehr sehr seltsamen Problem herum:

    und zwar habe ich eine Funktion geschrieben um mir die Adresse einer Variablen mit bekanntem Wert zu besorgen(als einfaches Beispiel habe ich hier mal MineSweeper genommen), diese enthält auch einige andere eigene Funktionen aus einer eigenen dll die aber perfekt funktionieren 🙂

    hier mal der Code der problematischen Funktion:

    HWND hwnd=FindWindow(0, TEXT("MineSweeper"));
    
    	HANDLE handle=leserechte_holen(hwnd);
    
    	vector<DWORD> adressen;
    	cout<<"geben Sie den zu suchenden Wert ein!\n";
    	int wert;
    	cin>>wert;
    	system("cls");
    	cout<<"starte Scanvorgang; dies kann 1 - 15 min dauern...\n";
    	scan_process_for_value(hwnd, wert, adressen);
    	cout<<"scanvorgang abgeschlossen;\n"<<adressen.size()<<" Uebereinstimmungen gefunden\n\n";
    	system("PAUSE");
    	system("cls");
    	cout<<"Veraendern Sie den Wert der Zielvariable und geben Sie den neuen Wert ein\n";
    	int neue_mienenzahl;
    	cin>>neue_mienenzahl;
    	system("cls");
    	cout<<"gefilterte adressen werden erneut gescannt\n";
    	vector<DWORD> neue_adressen;
    	rescan_adresses(handle, adressen, neue_mienenzahl, neue_adressen);
    	cout<<"Scan abgeschlossen\n";
    	system("PAUSE");
    	system("cls");
    	cout<<"folgende Adressen wurden gefiltert:\n\n";
    	for(int a=0;a<neue_adressen.size();a++)
    	{
    		cout<<hex<<"0x"<<neue_adressen[a]<<"\n";
    	}
    	system("PAUSE");
    	system("cls");
    	cout<<"sollen die werte der adressen ersetzt werden(1) der nicht (2)?\n";
    	int choice;
    	cin>>choice;
    	if(choice==1)
    	{
    	cout<<"durch welchen Wert soll ersetzt werden?\n";
    	int wert_ersetzen;
    	cin>>wert_ersetzen;
    	system("cls");
    	cout<<"beginne ersetzen...\n";
    	bool success=werte_ersetzen(handle, neue_adressen, wert_ersetzen);
    	if(success==true)
    	{
    		cout<<"all values successfully replaced.\n";
    	}
    	if(success==false)
    	{
    		cout<<"error while trying to replace the values, at least one value couldn't be replaced\n";
    		cout<<"Error-code from getlasterror(): "<<GetLastError()<<"\n";
    	}
    
    	}
    	else
    	{
    	}
    

    wenn ich diesen Code in die main.cpp einer ganz normalen win32 konsolenanwendung packe funktioniert alles perfekt und am ende steht im Vektor die Zieladresse 🙂 ;

    mein Problem ist jetzt aber wenn die diese Funktion gaaaanz genau so ohne irgendetwas zu ändern in eine dll packe
    zB so:

    __declspec(dllexport) scan_process(HWND hwnd)
    {
    //Code siehe oben
    }
    

    (dabei lasse ich natürlich die erste Zeile aus obigem Code weg weil hwnd schon definiert ist) so funktioniert sie plötzlich nicht mehr wie gewünscht:

    😕 konkret äußert sich das dadurch dass zwar keine fehlermeldungen beim Kompilieren oder zur Laufzeit kommen aber der Zielvektor(in dem normal die gefundene(n) Adresse(n) stehen) am Ende der Funktion einfach leer ist 😕

    allerdings habe ich noch nicht mal ansatzweise eine Idee woher dieser komische Fehler kommen könnte weil ich am Code wirklich nichts geändert habe!(außer natürlich obigen code in eine Funktion zu packen 😉 )

    im Übrigen habe ich natürlich auch nichts an den Funktionen die ich aus der dll importiere gaändert.

    genau deswegen kann ich mir überhaupt nicht erklären warum das so ist 😞 😕

    danke schonmal für eure Hilfe,
    andi01.



  • LOL WinAPI.



  • oh stimmt natürlich. ich stelle die Frage lieber mal da 😃


Log in to reply