在C#中调用C++写的DLL
来源:互联网 发布:ios软件免费下载 编辑:程序博客网 时间:2024/06/06 11:40
平常写程序用的都是C++,C#只是本科学过一些,也没好好学,目前,工作中用C++实现算法后,需要做个界面展示。C#拉界面真是太方便了,所以想用C#做个界面,核心算法由C++写,编成DLL,在界面程序总调用。
网上有很多博客都讲了C#如何调用C++写的DLL,这里不细说,只是记录一下自己在这过程中学到的一些东西,防止忘记,以后即使忘了,也可以在这里查到。
(1)关于回调函数。算法中用到了回调函数,即在C++程序中要调用C#写的一个函数,采用回调函数的方式,将函数地址传给C++程序。
这里需要注意的是,由于C#函数默认参数读取方式的是stdcall,而C++是cdecl,所以,在C++中声明函数指针时,应显示的使用stdcall,这样C++程序调用C#的函数时,参数读取方式一致,就不会出错。
其次,由于需要在C#中声明“函数指针”,这里需要用委托代替函数指针,关于C#中的委托和C++中的函数指针有什么区别,网上有,这里就不介绍了。
(2)关于extern "C" 在工程中,将C++写的类封装成一个个函数(貌似C#不能直接调用DLL封装的类,故一般先将类中用到的函数封装成一个个函数接口),此时,需在前面加上extern "C",基本作用就是规定编译时,函数名在DLL中的名字(C++由于有重载,因此编译时,DLL中的函数名除了原本函数名外,还有参数的信息)。
我感觉之所以按照C的方式编译函数名,是为了C#调用时,根据函数名找到函数入口(EntryPoint),不然,按照C++编译,函数名称会变,可能找不到(我的猜想)。
另外,若C++导出DLL用默认的形式,即cdecl,DLLimport中CallingConvention (调用约定)参数应该指明cdecl(默认的WINAPI,即stdcall)。
- 在C#中调用C语言写的动态链接库 DLL
- 在C#中调用C++写的DLL
- 怎样在C#中调用Delphi6写的DLL
- 在C++ 中 如何调用 C# 写的DLL
- 在C#中调用C++写的DLL
- 在C++ 中 如何调用 C# 写的DLL
- 在C#中使用C/C++写的DLL
- 在C#中使用C/C++写的DLL
- 如何在C#中使用C/C++写的DLL。
- 在C#中使用C/C++写的DLL
- 在C#中调用C++Builder编写的DLL
- 在C#中调用C++Dll函数的方法
- C#中调用C++写的DLL
- C#写的dll,C#中如何调用
- C#下调用C写的dll的例子
- 在c#项目中调用及调试c++写的dll
- swig--在java、C#中调用c++写的DLL(以vs2012配置为例)
- 在c#项目中调用及调试c++写的dll
- oracle—email邮件发送
- Visual Studio 2008 下安装boost的详细步骤 此博文包含图片
- intent.setFlags的参数含义及使用方法
- mybatis 连接mysql数据库 tinyint 为boolean类型
- EditText 里的属性
- 在C#中调用C++写的DLL
- 18种和“距离(distance)”、“相似度(similarity)”相关的量的小结
- Oracle_索引置为invisible和unusable状态是否占用空间
- 专为设计师而写的GitHub快速入门教程
- 中国大学MOOC-陈越、何钦铭-数据结构基础习题集 00-自测1. 打印沙漏(20)
- git笔记之README.md格式
- [leetcode] 240.Search a 2D Matrix II
- 《笨方法学python》-3
- cuda