I have C++ source & headers for a set of libraries which I need to call from a C# application. I've created a managed C++ wrapper around the functions I need and am able to call them from C# marshalling the data backwards and forwards.

Now the hard part..

My unmanaged C++ library generates status messages as it runs and I'd like to be able to display these from the calling C# application. My current thinking goes like this:

I'd like the unmanaged C++ library code to call a function in my C# code that I pass to the managed wrapper as I create it. I've found a few tutorials on Code Project but the syntax seem to be out of date.

If anyone has some sample code or could point me in the direction of a good tutorial that would be great.

Hi rerun, the intention of the callback is to pass status messages back to the calling appliction. They take the form of strings that I'd like to display in the C# GUI.
–
Richard AdamsApr 25 '11 at 16:23

1 Answer
1

You can pass a .NET delegate to a C++/CLI function that takes a pointer to a function with "matching" arguments.

Caveats

The pointer-to-function must be STDCALL calling conventions

If the delegate is a member of an object, this pointer to function will not count as a reference to keep the object alive. You have to maintain a reference to the object during the time that the callback is held

Since you think your examples are out of date, I am going to assume you are using the new syntax of C++/CLI. Here is a CodeProject with an example of how to do that

Pay careful attention to point #2 in my answer or your object might get GC'd before you call back into it. The existence of the pointer-to-function does not hold a reference.
–
Lou FrancoApr 25 '11 at 18:27