这是我的C ++代码:
此函数在我的DLL中导出。
EXPORT set_hook(fnc_public_hook hook){
public_hook = hook;
}
现在,如果我将其与非托管代码挂钩,就像以下一切正常。
set_hook(my_fnc);
现在,在调用我的DLL my_fnc
中的每个事件之前,我可以对数据进行一些预处理。
问题是我不知道如何在.NET中执行此操作
如何获取.NET函数指针?以及如何在每个事件之前使用set_hook()
来调用我的.NET函数?
答案 0 :(得分:0)
using System.Runtime.InteropServices;
在某处,为你想要的函数
创建一个委托[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate uint YourFunctionDelegate();
将您的委托设置为指向您的函数,即在构造函数中
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