这是我的 C++ 代码:
此函数在我的 DLL 中导出。
EXPORT set_hook(fnc_public_hook hook){
public_hook = hook;
}
现在,如果我从非托管代码中 Hook 它,就像遵循一切正常一样。
set_hook(my_fnc);
现在,在调用我的 DLL my_fnc
中的每个事件之前,我可以对数据进行一些预处理。
问题是我不知道如何在 .NET 中执行此操作。
如何获取 .NET 函数指针?以及如何在每个事件之前使用 set_hook()
调用我的 .NET 函数?
最佳答案
using System.Runtime.InteropServices;
在某处,为您想要调用的函数创建一个委托(delegate)
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate uint YourFunctionDelegate();
将您的委托(delegate)设置为指向您的函数,即在您的构造函数中,
YourFunctionDelegate = myDotNetFunc;
在您的命名空间内的 NativeMethods 类中,
[DllImport("YourDLL.dll", EntryPoint = "set_hook", CallingConvention = CallingConvention.Cdecl)]
private static extern int setHook([MarshalAs(UnmanagedType.FunctionPtr)]YourFunctionDelegate myDelegate);
最后,你可以调用你的c++函数
NativeMethods.setHook(YourFunctionDelegate);
确保您知道哪种调用约定是合适的。
编辑:不要收集垃圾!
http://msdn.microsoft.com/en-us/library/ms182294%28v=vs.80%29.aspx
关于c# - 如何在托管函数中 Hook 非托管函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20705696/