【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

c和c++作为早期的开发语言,积累了大量的可用库。后续的开发语言,虽然在易用性和容易程度上面有了很大的提高,但是对于曾经的开发库,是无法做到弃之不用的。因此,对于c#语言来说,也是一样的。今天就来讨论下如何用c#调用dll这个问题。

1、首先编写一个c++代码

注意这里的c++代码是生成动态库,不是生成exe文件。后续c#就是使用这个动态库里面的函数。假设函数的内容是这样的,


extern  "C" __declspec(dllexport) int add(int x, int y)
{return x + y;
}extern "C" __declspec(dllexport) int sub(int x, int y)
{return x - y;
}

2、生成动态库之后,准备c#代码

namespace ConsoleApp1
{class Program{static void Main(string[] args){}}
}

初始创建工程后,一般什么内容也没有。这时候,需要做的第一步,就是添加InteropServices,即,

using System.Runtime.InteropServices;

接着,第二步就是,从dll中引用导出来的函数。从上面c++的内容看,导出的函数有两个,一个是add,一个是sub,

        [DllImport("Dll1.dll", EntryPoint = "add", CallingConvention = CallingConvention.Cdecl)]public static extern int add(int a, int b);[DllImport("Dll1.dll", EntryPoint = "sub", CallingConvention = CallingConvention.Cdecl)]public static extern int sub(int a, int b);

注意,这两个声明最好放在class里面。有了这两个声明之后,就可以开始准备使用这两个函数了,这也是所谓的第三步动作,

        static void Main(string[] args){Console.WriteLine(add(1,2));Console.WriteLine(sub(1,2));}

有了上面的三步操作,不出意外的话,其实是可以看到3和-1这样的打印了,如下图所示,

3、总结

前面说到了c#调用了c++。总结一下主要有这么两点,第一,调用的时候传参和出参最好是基本的数据,比如char、int、char*、float、double这样的数据。第二,动态库一定要是extern "C" __declspec(dllexport)这样来定义,只有这样,才能将不确定性降到最低。最后为了方便大家复现这个问题,给出完整的c#参考代码,希望对大家有所裨益。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;namespace ConsoleApp1
{class Program{[DllImport("Dll1.dll", EntryPoint = "add", CallingConvention = CallingConvention.Cdecl)]public static extern int add(int a, int b);[DllImport("Dll1.dll", EntryPoint = "sub", CallingConvention = CallingConvention.Cdecl)]public static extern int sub(int a, int b);static void Main(string[] args){Console.WriteLine(add(1,2));Console.WriteLine(sub(1,2));}}
}

c#开发和学习(c#调用dll)相关推荐

  1. 关于JAVA调用dll的学习总结

    首先是背景: 1.程序猿小明要使用Java程序来调用IC读卡器,由于Java没有相关方法直接调用读卡器,目前只有C或C++语言能调用读卡器的驱动来控制读卡器,因此得先使用C或C++写完操作函数,封装成 ...

  2. QT5百度地图开发学习——qt调用输入位置坐标位置进行百度地图定位

    系列文章目录 上一章: QT5百度地图开发学习--JavaScript调用qt函数并传参给qt 文章目录 系列文章目录 前言 一.界面设计 二.槽函数 总结 前言 本文实现输入坐标然后在地图上显示位置 ...

  3. python和C++联合开发(python调用DLL文件)

    在开发的过程中的有的厂家提供的API,或者其他同事写的功能模块用的是C++语言,而因为我们自己菜或者懒习惯使用python脚本语言开发,这里主要讲解如何使用python调用DLL文件(windows平 ...

  4. [转]C++学习:VC++动态链接库(DLL)编程深入浅出(zz)

    转自:http://www.cnblogs.com/chio/archive/2007/11/03/948480.html 1.概论 先来阐述一下DLL(Dynamic Linkable Librar ...

  5. labview调用DLL

    <link href="https://csdnimg.cn/public/favicon.ico" rel="SHORTCUT ICON"> &l ...

  6. C#【必备技能篇】VS2019 使用C/C++ 生成DLL 文件,并用 C/C++、C#调用DLL

    文章目录 前言 一.生成dll 新建项目-C++-动态链接库(DLL) 项目-右键-属性-C/C++-预编译头:不使用预编译头. 项目-右键-属性-C/C++-高级:编译为:C.(也可以不更改,默认就 ...

  7. CANalyzer及CANOE使用四:调用DLL实现UDS_TP/NM(OSEK/Autosar)或安全算法解锁功能

    前言 一.封装dll,调用dll解锁 二.capl写解锁函数 三.CDD加载dll解锁 四.调用DLL实现UDS_TP/NM功能 五.总结 ---------------- 前言 请输入公众号:总线网 ...

  8. 转【C#调用DLL的几种方法,包括C#调用C\C++\C#DLL】

    C#中dll调用方法 一.      DLL与应用程序 动态链接库(也称为DLL,即为"Dynamic Link Library"的缩写)是Microsoft Windows最重要 ...

  9. C#程序实现动态调用DLL的研究(转)

    摘 要:在<csdn开发高手>2004年第03期中的<化功大法--将DLL嵌入EXE>一文,介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在可执行文件运行时,自动从资 ...

最新文章

  1. django 2.0路由配置变化
  2. KafkaManager中Group下不显示对应Topic的解决方案
  3. 三部排序|2013年蓝桥杯B组题解析第六题-fishers
  4. android api接口封装,生成App接口
  5. xcode常用快捷键_Mac及Xcode常用快捷键
  6. java矩阵连乘算法_使用java写的矩阵乘法实例(Strassen算法)
  7. 05 HTML字符串转换成jQuery对象、绑定数据到元素上
  8. spring 的aop操作
  9. Spring第三篇【Core模块之对象依赖】
  10. 人脸离线识别模块_人脸消费机离线刷脸如何实现?
  11. iOS系统预览文件但不分享的实用技巧 (iOS10, QLPreviewController)
  12. TCP协议(标志位URG、PSH,定时器,连接的建立和断开)
  13. js 获取html文字颜色,js获得网页背景色和字体色的方法
  14. mysql丢数据无法启动mysql_mysql InnoDB数据无法启动解决办法
  15. Dijkstra算法C++实现
  16. mysql必需记住的语句_关于MySql的语句
  17. Manacher (马拉车算法)
  18. 选择BIMC托管电子商务的理由
  19. PS制作独特火焰立体文字
  20. 空间直角坐标系、左手坐标系、右手坐标系

热门文章

  1. matlab gauss pyramid,halcon的高斯金字塔gen_gauss_pyramid和单调算子monotony
  2. Citespace教程笔记
  3. 计算机毕设(附源码)JAVA-SSM基于Java的班主任管理系统的实现
  4. [附源码]SSM计算机毕业设计高校班主任班级管理系统JAVA
  5. 使用Python爬取考勤信息
  6. Exchange 交换机详解
  7. C++调用mysql自定义函数
  8. 遥感计算机解释技术PPT,第六章遥感数字图像计算机解译ppt课件.ppt
  9. Sifid and Strange Subsequences
  10. C++:出生年(团体程序设计天梯赛)