CDetours
dllインジェクションを使用してクラスメソッドを迂回しました(はい、リバースエンジニアリングを勉強void MyClass::SetData( D3DXVECTOR3& data )
しています)。実際のアプリケーションではすべて正常に機能し、関数は迂回され、デバッグメッセージ(コンソール出力)が表示されます。
本当の問題は、この関数を呼び出しにしようとしているということです。代わりにグローバル関数である場合は、次のようにします。
typedef void (*SetDataFunc)(D3DXVECTOR3&); //for global functions __cdecl is ok
SetDataFunc SetDataRev = (SetDataFunc)0x00428FD0; //just an example address
then call it:
D3DXVECTOR3 data(0,0,0);
SetDataRev(data);
私の問題は、アドレスを知っていて、MyClass::SetData
上記のメソッドを使用してそれを呼び出しても(実際に呼び出されます)、MyClass
呼び出し自体が意味をなさないため、作成されたオブジェクトは同じままです。オブジェクトから呼び出していないためです。
例えば
MyClass myobj;
myobj.SetData( data ); //ok any members that 'SetData' changes will be changed.
SetDataRevForClass( data ); //not ok, nothing on 'myobj' changed
myobj
dll でクラス メソッドを「から」呼び出すにはどうすればよいですか?