
代码// Bsr.Hardware.cpp : 定义 DLL 应用程序的导出函数。
//
#include "stdafx.h"
typedef void(*Action)();
typedef void (__stdcall *LPFUN)(int); //定义一个函数指针,此处必需要定义一个函数指针,若是定义为add(int a,int b,void(*ball)(int))这种方式,则C#回调时将没法返回到C++ DLL中的函数调用。
_declspec(dllexport) int add(int a, int b, LPFUN ball=nullptr)
{
int ret = a + b;
if (ball != nullptr) {
ball(ret);
}
return ret+100;
}
_declspec(dllexport) int add1(int a, int b)
{
int ret = a + b;
return ret;
}

代码public partial class Form1 : Form
{
public delegate void AddEvent(int x); //定义委托来与DLL中函数指针匹配
[DllImport("Bsr.Hardware.DLL", EntryPoint = "add", SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern int add(int a, int b, AddEvent act);
[DllImport("Bsr.Hardware.DLL", EntryPoint = "add1", SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern int add1(int a, int b);
public static void ActEvent(int x)
{
MessageBox.Show(x.ToString());
}
private void button1_Click(object sender, EventArgs e)
{
AddEvent ev = new AddEvent(ActEvent);
int ret = add(100, 100, ev);
int y = 100;
MessageBox.Show("f1=" + ret.ToString());
}
}