iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C#调用C++动态库接口函数和回调函数方法
  • 760
分享到

C#调用C++动态库接口函数和回调函数方法

2024-04-02 19:04:59 760人浏览 安东尼
摘要

目录1. 前言2. 普通接口函数调用示例2.1 c++端编写接口2.2 C#端调用3. 回调函数调用示例3.1 C++端编写接口3.2 C#端调用1. 前言 需求: 当前C已经写好了

1. 前言

需求: 当前C已经写好了一个动态库,完成了产品开发需求,C#需要调用C编写的动态库DLL接口,开发出完整的软件,DLL动态库里包含了普通接口函数,回调函数。

开发环境: win10 64位 、VS2017

2. 普通接口函数调用示例

2.1 C++端编写接口

(1)头文件里声明需要提供的接口,导出接口,方便C#调用

//带返回值无形参示例
EXTERN_C TOOLLIBRARY_api char* Version(void);
//无返回值带指针形参示例
EXTERN_C TOOLLIBRARY_API void SetApplicationDirPath(char *buff);

(2)源代码

char* Version(void)
{
    return version_str;
}

void SetApplicationDirPath(char * buff)
{
    std::string str = buff;
    printf("传入的参数:%s\n", buff);
    std::cout << "字符串:"<<buff <<std::endl;
}

这里写了两个函数,分别演示传参和带返回值的接口函数使用方法。

2.2 C#端调用

namespace CSharp_LoadLibrary
{
    class Program
    {
        [DllImport("TOOLLIBRARY.dll", EntryPoint = "Version", CharSet = CharSet.Ansi, CallinGConvention = CallingConvention.Cdecl)]
        extern static IntPtr Version();

        [DllImport("TOOLLIBRARY.dll", EntryPoint = "SetApplicationDirPath", CallingConvention = CallingConvention.Cdecl)]
        extern static void SetApplicationDirPath(IntPtr text);
        
        static void Main(string[] args)
        {
            //传入参数--测试
            SetApplicationDirPath(Marshal.StringToHGlobalAnsi("传入字符串测试.."));

            //打印返回值测试
            Console.WriteLine(Marshal.PtrToStringAnsi(Version()));
        }
    }
}

3. 回调函数调用示例

回调函数,光听名字就比普通函数要高大上一些,那到底什么是回调函数呢?下面来至百度百科的解释:

回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

回调函数是指 使用者自己定义一个函数,实现这个函数的程序内容,然后把这个函数(入口地址)作为参数传入别人(或系统)的函数中,由别人(或系统)的函数在运行时来调用的函数。函数是你实现的,但由别人(或系统)的函数在运行时通过参数传递的方式调用,这就是所谓的回调函数。简单来说,就是由别人的函数运行期间来回调你实现的函数。

3.1 C++端编写接口

(1)头文件声明

//设置回调函数指针
EXTERN_C TOOLLIBRARY_API void Set_DebugCallBackFunction(void(*func)(const char *p));

(2)源代码

//C++的回调函数
void Set_DebugCallBackFunction(void(*func)(const char *p))
{
    //设置回调函数指针
    CallBackFunction_p = func;
    printf("回调函数设置成功.\n");
    CallBackFunction_p("这是回调函数传出来的测试数据.\n");
}

这是C端编写的一个回调函数设置函数,C#调用这个函数将函数指针传递过来,C通过传递过来的函数指针反过来主动调用C#的方法,实现数据交互。

3.2 C#端调用

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;

namespace CSharp_LoadLibrary
{
    class Program
    {
        [DllImport("TOOLLIBRARY.dll", EntryPoint = "Set_DebugCallBackFunction", CallingConvention = CallingConvention.Cdecl)]
        extern static int Set_DebugCallBackFunction(CallbackDelegate callback);
        
        //定义委托
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public delegate void CallbackDelegate(IntPtr Path);

        //接收C++回调数据
        //当C++调用传递过去的函数指针时,就会执行下面这个方法
        static void CallBackFunction(IntPtr Path)
        {
            Console.WriteLine("C++传出来的回调:" + Marshal.PtrToStringAnsi(Path));
        }

        static void Main(string[] args)
        {
            //调用C++设置回调函数的接口,将C#的函数地址传递过去
            Set_DebugCallBackFunction(CallBackFunction);
        }
    }
}

到此这篇关于C#调用C++动态库接口函数和回调函数方法的文章就介绍到这了,更多相关C#调用C++接口函数和回调函数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C#调用C++动态库接口函数和回调函数方法

本文链接: https://www.lsjlt.com/news/143338.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C#调用C++动态库接口函数和回调函数方法
    目录1. 前言2. 普通接口函数调用示例2.1 C++端编写接口2.2 C#端调用3. 回调函数调用示例3.1 C++端编写接口3.2 C#端调用1. 前言 需求: 当前C已经写好了...
    99+
    2022-11-13
  • C#怎么调用C++动态库接口函数和回调函数
    本文小编为大家详细介绍“C#怎么调用C++动态库接口函数和回调函数”,内容详细,步骤清晰,细节处理妥当,希望这篇“C#怎么调用C++动态库接口函数和回调函数”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1. 前言...
    99+
    2023-06-29
  • c++异步回调函数怎么调用
    在C++中,异步回调函数通常使用函数指针或者函数对象来表示。下面是调用异步回调函数的几种常见方法:1. 使用函数指针:cppvoid...
    99+
    2023-10-20
    c++
  • C语言中回调函数和qsort函数的用法详解
    目录回调函数指向函数指针数组的指针qsort(qulick sort)-库函数回调函数 通过函数指针调用的函数,如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调...
    99+
    2022-11-13
  • C++调用动态库和Python调用C++动态库的方法是什么
    这篇文章主要介绍“C++调用动态库和Python调用C++动态库的方法是什么”,在日常操作中,相信很多人在C++调用动态库和Python调用C++动态库的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答...
    99+
    2023-07-05
  • C++调用动态库两种方式和Python调用C++动态库
    创建动态库动态库是在程序运行时加载的库文件,并不占用程序本身大小。选择动态库项目:新建.h和.cpp文件:# cat.h #pragma once extern "C" _declspec(dllexport) int sum(int a,...
    99+
    2023-05-14
    Python C++ 动态库
  • C++知识点之inline函数、回调函数和普通函数
    目录一、inline内联函数# 1.1 使用# 1.2 编译器对 inline 函数处理步骤# 1.3 优缺点# 1.3.1 优点# 1.3.2 慎用内联# 1.3.3 不宜使用内联...
    99+
    2022-11-12
  • C# 中回调函数如何使用
    本篇文章给大家分享的是有关C# 中回调函数如何使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。什么是C# 回调函数C# 回调函数是应用程序提供给Windows系统DLL或其它...
    99+
    2023-06-18
  • C++11 成员函数作为回调函数的使用方式
    目录C++11成员函数作为回调函数使用示例1示例2类成员函数作为回调函数的方法及注意点类成员函数当回调函数的方法为什么回调函数必须为静态函数?类的静态成员函数如何访问非静态成员?C+...
    99+
    2022-11-13
    C++11 成员函数 C++11 回调函数 使用回调函数
  • C和C++的函数调用方式是什么
    这篇文章主要介绍C和C++的函数调用方式是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!调用方式C/C++函数有多种调用约定。C语言:__cdecl__stdcall__fastcallnaked__pascal...
    99+
    2023-06-29
  • 在动态库中调用外部函数的方法
    本篇内容介绍了“在动态库中调用外部函数的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!愉快的玩耍比如:...
    99+
    2022-10-19
  • c语言处理函数调用的方法
    1. 要编译的测试代码: int plus(int x, int y) { return x + y; } int main(void) { return plus(3...
    99+
    2022-11-12
  • ubuntu中python调用C/C++方法之动态链接库详解
    安装booJlLUslVOSst python调用C/C++的方法有很多,本文使用boost.python。考虑到后期有好多在boost上的开发工作,所以boost一并安装了,Boost库分为两个部分来使用,一是直接使...
    99+
    2022-06-04
    python调用动态链接库 python 动态链接库 ubuntu 动态链接库
  • C语言回调函数的简单运用
    目录一、什么是回调函数二、简单的回调函数三、带参数的回调函数一、什么是回调函数 因为在程序中,我们有很多的库函数,我们也有很多的上层函数,为了增加程序的灵活性,我们就将一些函数指针作...
    99+
    2022-11-12
  • C语言的回调函数怎么使用
    本篇内容主要讲解“C语言的回调函数怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言的回调函数怎么使用”吧!对指针的应用是C语言编程的精髓所在,而回调函数就是C语言里面对函数指针的高级...
    99+
    2023-06-17
  • C语言的回调函数如何使用
    这篇“C语言的回调函数如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言的回调函数如何使用”文章吧。1.程序架构一...
    99+
    2023-06-29
  • c语言callback回调函数怎么使用
    在C语言中,回调函数(callback)是一种函数指针,可以作为参数传递给其他函数,这样在调用该函数时,可以执行传递的回调函数。下面...
    99+
    2023-10-18
    c语言
  • python 回调函数和回调方法的实现分析
    回调与事件驱动 回调函数有比较重要的意义:它在是事件驱动的体现 我们试想一个场景,如果我们触发了某个事件,比如点击事件 那么只要给这个点击事件绑定一个或多个处理事件,也就是回调函数 我们就可以在点击事件被触...
    99+
    2022-06-04
    回调 函数 方法
  • c语言中的回调函数怎么使用
    这篇文章主要讲解了“c语言中的回调函数怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“c语言中的回调函数怎么使用”吧!一、通过这节课程你能掌握以下知识...
    99+
    2022-10-19
  • c语言怎么调用python函数返回值
    在c语言中调用python函数返回值,具体方法如下:void test1() { Py_Initialize();//初始化python getcurrent(); PyObject *pModule = NULL, *pFunc = NU...
    99+
    2022-10-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作