I am writing a C# application which uses Interop services to access functions in a native C++ DLL. I am already using about 10 different functions which are working.
Now I am not sure how to handle passing a callback as a parameter so that the DLL can call my code.
Here is the function prototype of the DLL:
typedef void (WINAPI * lpfnFunc)(const char *arg1, const char *arg2)
And the function that allows me to pass the above type:
int WINAPI SetFunc(lpfnFunc f)
Here is my C# code for the delegate and function definitions:
public delegate void Func(string arg1, string arg2);
public static void MyFunc(string arg1, string arg2)
Here is my C# code for the SetFunc Interop function:
[DllImport("lib.dll", CharSet = CharSet.Ansi)]
public static extern int SetFunc(Func lpfn);
And finally here is the code where I call the SetFunc function and pass it my callback:
SetFunc(new Func(MyFunc));
Unfortunately my function is not being called when it should be. The return value of the SetFunc function is returning the error code for a Success, so either it's not calling my function or it's not working because my code is wrong.
Can you try changing the Func delegate to
And the SetFunc method to
This works for me:
Calc.h (Calc.dll, C++):
Calc.cpp (Calc.dll, C++):
Program.cs (Sample.exe, C#):