C#调用dll,dll中执行C#端的回调函数

本文介绍了一个C#调用C++DLL的具体示例,包括如何定义回调函数类型、导出C++函数供C#使用以及C#端的调用方式。通过实例演示了不同类型参数的传递方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

----------------------------------------------------------------------------------------------------
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、执行结果:
          


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值