Calling a C# function from a C++ DLL

2020-05-09 12:24发布

问题:

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