I have a DLL written in C++, and I want to pass a C# function to a function in the C++ DLL and call the C# function from C++. How would I do this? Thanks in advance, and please keep your answers simple. I don't think I'll need to post a code sample for this one, but if you need one please ask.
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
There are generally two ways to accomplish this: COM Interop and Reverse PInvoke. If you are passing around a lot of objects with behaviors then COM interop is likely you're best bet. Here though it sounds like you're just trying to pass a single function around. If so then Reverse PInvoke is what you want.
Here is a nice tutorial on the subject
- http://tigerang.blogspot.com/2008/09/reverse-pinvoke.html
- http://blogs.msdn.com/b/thottams/archive/2007/06/02/pinvoke-reverse-pinvoke-and-stdcall-cdecl.aspx
The basic process though is fairly similar to normal PInvoke.
- Define a native entry point which takes at least one function pointer
- Define the native pointer as a delegate in managed code
- Pass the delegate down through the entry point
It can now be invoked as a normal function pointer in native code