c/c++回调c#委托:
worker.dll/main.h
extern "C"
{
#define DLL __declspec(dllexport)
typedef void (__stdcall *Callback)(int);
DLL void DoWork(Callback callback);
}
worker.dll/main.c
DLL void DoWork(Callback callback)
{
callback(1);
}
c# Program.cs
using System;
using System.Runtime.InteropServices;
class Program
{
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
delegate void Callback(int value);
[DllImport("worker.dll")]
public static extern void DoWork([MarshalAs(UnmanagedType.FunctionPtr)]Callback callbackPointer);
[STAThread]
static void Main(string[] args)
{
// define a callback delegate
Callback callback =
(value) =>
{
Console.WriteLine("callback = {0}", value);
};
Console.ReadKey(true);
// call DoWork in C code
DoWork(callback);
Console.WriteLine();
Console.ReadKey(true);
}
}
ps:
托管代码捕捉非托管异常
System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute
http://msdn.microsoft.com/zh-cn/library/System.Runtime.InteropServices(v=vs.100).aspx