C#调用dll,dll中执行C#端的回调函数
2014-01-16 17:14
260 查看
---------------------------------------------------------------------------------------------------- VC DLL:
/* 文件名:lib.h */
//callback of C#
#pragma once
#include <Windows.h>
#ifndef STRUCTMOD_EXPORT
#define STRUCTMOD_EXPORT extern "C" __declspec(dllimport)
#endif
//1、demo 传递结构体和int类型
//typedef struct _tagCardEvent {
// DWORD CardNo;
// INT32 EvtYear;
//} CardEvent, *PCardEvent;
//STRUCTMOD_EXPORT CardEvent;
//STRUCTMOD_EXPORT PCardEvent;
//typedef void CALLBACK PFNTEST(PCardEvent pce, INT32 nEvt);
//STRUCTMOD_EXPORT void CSharpCaller(PFNTEST pfnTest);
//2、cbltest
typedef void CALLBACK PFNTEST(INT32 nEvt,char * t);
STRUCTMOD_EXPORT void CSharpCaller(PFNTEST pfnTest);
/* 文件名:lib.cpp */
#include "lib.h"
#include "stdio.h"
#include "string.h"
#define STRUCTMOD_EXPORT extern "C" __declspec(dllexport)
#include <tchar.h>
//1、Demo 传递结构体和int类型
//void CSharpCaller(PFNTEST pfnTest) {
// CardEvent ce[2] ={1 ,2};
// if (pfnTest) (*pfnTest)(ce,_countof(ce));
//}
//2、cbltest
void CSharpCaller(PFNTEST pfnTest) {
if (pfnTest) (*pfnTest)(100,"msg from C++ dll");
}
C# 调用:
//public delegate bool MyCallBack(IntPtr p, Int32 nEvt); //定义委托函数类型 1、demo 传递结构体和int类型
public delegate bool MyCallBack(Int32 nEvt, string ss); //定义委托函数类型 2、cbltest
[DllImport(@".\mydll.dll", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
public static extern int CSharpCaller(MyCallBack t);
public static bool Report(Int32 nEvt,string ss)
{
MessageBox.Show("Window handle is " + nEvt+""+ss);
return true;
}
2、调用
MyCallBack myCallBack = new MyCallBack(VideoForm.Report);
CSharpCaller(myCallBack);
3、执行结果:
相关文章推荐
- c#中string.trimstart() 和string.trimend() 的用法
- C#一行一行读取DataSet 数据
- c#读写注册表示例分享
- C# 根据Word 模板生成word 文件
- 怎么复制DataTable过滤部分数据到另一个DataTable
- 【转载】C#中splitContainer用法
- (转)C# 中的委托和事件
- C#中delegate实现回调函数示例
- C#如何调试VC编译的DLL
- 针对C#调用OutLook发送邮件模块出现的各类问题解决方案
- c#中利用“|”运算组合多项
- C#向串口发指令
- C#读取Excel文件:通过OleDb连接,把excel文件作为数据源来读取
- C#反射概念以及实例详解
- C#下XML序列化出现System.InvalidOperationException的一种解释
- C#语法糖(Csharp Syntactic sugar)大汇总
- C# DataTable 过滤重复数据
- C# Field,Property,Attribute的区别
- C# 获取当前月份天数的三种方法总结
- C# 文件操作