別のプロセス (C++) で呼び出したいメソッドのアドレスがわかっている場合、C# でそれを行うにはどうすればよいですか?
メソッドのオフセットは常に同じです。
私の現在のコードは次のとおりです。
struct DataToPass
{
int field;
}
delegate void Caller(DataToPass data);
public void Call()
{
DataToPass data = new DataToPass();
data.field = 12345;
IntPtr callptr = new IntPtr(myprocess.Modules[0].BaseAddress.ToInt32() + 0x3A5582);
Caller call = (Caller)Marshal.GetDelegateForFunctionPointer(callptr, typeof(Caller));
call(data);
}
しかし、プログラムを実行するとエラーが発生します:
タイプ 'System.AccessViolationException' の未処理の例外が testcall.exe で発生しました