[C/C++] kann mir jemand aus einer, zwei funktionen machen?

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von heiko12345, 15. April 2009 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  1. #1 15. April 2009
    kann mir jemand aus einer, zwei funktionen machen?

    kann mir jemand aus einer, zwei funktionen machen?

    dieser teil: HRESULT __stdcall hkEndScene(LPDIRECT3DDEVICE9 pDevice) ist wichtig, da ich eine start und eine endfunktion brauche.
    und dazwischen möchte ich weitere dx funktionen ausführen können.
    es soll eine 2d engine werden, die ein bestehendes dx fenster hooked.

    Code:
    // D3d hook 
    
    #include <windows.h>
    #include <cstdio>
    #include <d3d9.h>
    #include <d3dx9.h>
    
    typedef HRESULT(__stdcall* EndScene_t)(LPDIRECT3DDEVICE9); // typedef
    EndScene_t pEndScene;
    
    void InitHook();
    void *DetourFunc(BYTE *src, const BYTE *dst, const int len);
    
    HRESULT __stdcall hkEndScene(LPDIRECT3DDEVICE9 pDevice) 
    {
     // das ist das entscheidende: Wenn normalerweise EndScene aufgerufen wird, wird diese Funktion von dem Programm aufgerufen
     // hier kommen deine Sachen hin die man drawn will mit pDevice.
    
    
    
     // und dann noch zurück zum originalen EndScene, diese muss ja auch aufgerufen werden
     return pEndScene(pDevice);
    }
    
    int WINAPI DllMain(HINSTANCE hInst,DWORD reason,LPVOID reserved)
    {
     switch(reason)
     {
     case DLL_PROCESS_ATTACH:
     CreateThread(0, 0, (LPTHREAD_START_ROUTINE) InitHook, 0, 0, 0);
     break;
     }
     return true;
    }
    
    void InitHook()
    {
     HMODULE hModule = NULL;
     while( !hModule )
     {
     hModule = GetModuleHandleA( "d3d9.dll" ); // Handle zur DLL holen
     Sleep( 100 ); // 100ms warten
     }
     
     // 0x4FDD71B0 ist die Addresse für EndScene in d3d9.dll
     pEndScene = ( EndScene_t )DetourFunc((PBYTE) 0x4FDD71B0,(PBYTE)hkEndScene, 5); // hier ist der hook
    }
    
    void *DetourFunc(BYTE *src, const BYTE *dst, const int len) // detour, muss man nicht wirklich verstehen. Der Code ersetzt das alte endScene durch unseres. Ist von gd
    {
     BYTE *jmp = (BYTE*)malloc(len+5);
     DWORD dwback;
     VirtualProtect(src, len, PAGE_READWRITE, &dwback);
     memcpy(jmp, src, len); jmp += len;
     jmp[0] = 0xE9;
     *(DWORD*)(jmp+1) = (DWORD)(src+len - jmp) - 5;
     src[0] = 0xE9;
     *(DWORD*)(src+1) = (DWORD)(dst - src) - 5;
     VirtualProtect(src, len, dwback, &dwback);
     return (jmp-len);
    }
     

  2. Anzeige
    Dealz: stark reduzierte Angebote finden.
  3. #2 15. April 2009
    AW: kann mir jemand aus einer, zwei funktionen machen?

    Hacks, Cheats, etc. sind hier verboten, außerdem: Wieso willst du das wir etwas für dich machen wenn du anscheinen überhaupt keine Ahnung davon hast?

    Das bringt dir rein garnichts, weil du bei weiteren Schritten eh wieder Hilfe brauchst.

    Lass es sein und spiel fair. ;)
     
  4. #3 15. April 2009
    AW: kann mir jemand aus einer, zwei funktionen machen?

    sorry, aber hab noch nie so gelacht.....(ich glaub nicht, daß du weißt, wovon ich rede)
    ich will ein addon für eine 3d engine coden.....
    hab das dx subsystem easy to use aber ich brauch eben nen hook um das dx render window nutzen zu können.....
     
  5. #4 15. April 2009
    AW: kann mir jemand aus einer, zwei funktionen machen?

    Kann sein das du nur ein 'Addon' :rolleyes: schreibst, dennoch fehlen dir die Kentnisse um das zu ermöglichen.

    Wenn du nichtmal Funktionen mergen kannst, dann wirst du bei DirectX hochkant auf die Nase fallen.
     
  6. #5 15. April 2009
    AW: kann mir jemand aus einer, zwei funktionen machen?

    grundlegendes dx ist auch nicht notwendig, aber um erstmal anzufangen, benötige ich diesen eintrittspunkt.
    desweiteren kann ich den c++ code konvertieren....


    btw. mergen heißt zusammenfügen.........ich glaub nicht, daß ich was zusammenfügen will....sondern sozusagen eine dx9 pipeline öffnen will die geöffnet bleiben muss, ich will es nicht in diesen code mergen müssen...
     
  7. #6 15. April 2009
    AW: kann mir jemand aus einer, zwei funktionen machen?

    Verlesen, natürlich nicht mergen. :)

    C++-Code konvertieren?
     
  8. #7 15. April 2009
    AW: kann mir jemand aus einer, zwei funktionen machen?

    japp, aber wenn ich eine lösung finde, dann wohl eher in c++....
    und ich programmiere in verscheidenen sprachen, und kann den code dahingehend umschreiben....


    aber hey, back2topic...
     
  9. #8 15. April 2009
    AW: kann mir jemand aus einer, zwei funktionen machen?

    Nein, koennen wir nicht.

    [X] H & S.

    ~closed~
     

  10. Videos zum Thema
Die Seite wird geladen...