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.
This works for me:
Calc.h (Calc.dll, C++):
Calc.cpp (Calc.dll, C++):
Program.cs (Sample.exe, C#):
Can you try changing the Func delegate to
And the SetFunc method to