I
Also einige wissen ja daß ich hier schon eine Weile eine Möglichkeit suche eine bestehende 3D Directx9 engine(dll) um ein eigenes 2D-Engine Addon zu erweitern.
Dazu muss ich IDirect3D9 hooken.
Meine C++ kenntnisse werden zwar langsam besser, aber reichen noch nicht aus, um folgenden code so anzupassen, daß ich die gewünschten bzw. benötigen funktionen erhalte.
Also nochmal kurz umschrieben.
Ich möchte eine dll schlussendlich bauen, welche mindestens zwei funktionen enthält.
Nämlich Init2D() und DeInit2D().Dort soll das Device gehooked und wieder zurückgegeben werden.
Und dazwischen werden/können dann funktionen aus meiner lib(dll) benutzt werden(loadimage, drawimage etc.)
Der beste code den ich dazu gefunden habe ist der weiter unten.
Allerdings müsste ich den so umschreiben, daß daraus die beiden Funktionen Init2D() und DeInit2D() entstehen.
Vielleicht kann mir da jemand behilflich sein....
Wäre supernett.....wo ich doch heut Geburtstag habe...
// dllmain.cpp : Defines the entry point for the DLL application.
#include "stdafx.h"
#include <winsock2.h>
/*
Fake export function
*/
extern "C" __declspec(dllexport) void fakeexportfunction()
{
return ;
}
// Functions to be Hooked/Detoured
IDirect3D9 * (WINAPI * Real_Direct3DCreate9)(UINT SDKVersion) = Direct3DCreate9;
// Functions that replace Hooked/Detoured version
IDirect3D9 * WINAPI Hook_Direct3DCreate9(UINT a0)
{
Beep(1000, 1000);
IDirect3D9 * rv;
__try {
rv = Real_Direct3DCreate9(a0);
} __finally {
OutputDebugString(TEXT("Direct3DCreate9\n"));
}
OutputDebugString(TEXT("Direct3DCreate9\n"));
return rv;
}
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
LONG error;
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
DetourRestoreAfterWith();
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach(&(PVOID&)Real_Direct3DCreate9, Hook_Direct3DCreate9);
error = DetourTransactionCommit();
if (error == NO_ERROR)
OutputDebugString(TEXT("Attached Hooks\n"));
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourDetach(&(PVOID&)Real_Direct3DCreate9, Hook_Direct3DCreate9);
error = DetourTransactionCommit();
OutputDebugString(TEXT("Detached Hooks\n"));
break;
}
return TRUE;
}