c++调用dll_C#调用C++编写的DLL

 1 把DLL放在C#工程的Debug文件夹跟Release文件夹,我这里是使用X86编译的就放在了这两文件夹

  08853cd4343fc4b1944a8edc20c93dac.png

  5ad2c1595f56d7b9d88636eed4e8d94d.png

2 用DLL查看器 Viewdll.exe 查看DLL导出的函数如下图

  491db0a363e3fd175d1739c6a9ba2492.png

3 调用代码如下:

b8a0391156967941265c11fcd0b13180.png

using System.Runtime.InteropServices; //包含DllImport的using指令namespace TB { public partial class FormTB : Form {
//声明外部DLL的函数,这里的DLL函数接口已经从文档得知
[DllImport("USER_COM.dll", EntryPoint = "OpenCOM", CallingConvention = CallingConvention.Cdecl)]public static extern bool OpenCOM();
[DllImport("USER_COM.dll", EntryPoint = "Close_COM", CallingConvention = CallingConvention.Cdecl)]public static extern void Close_COM();
[DllImport("USER_COM.dll", EntryPoint = "COM_RX", CallingConvention = CallingConvention.Cdecl)]public static extern int COM_RX(byte[] RX_buff);
[DllImport("USER_COM.dll", EntryPoint = "COM_Send", CallingConvention = CallingConvention.Cdecl)]public static extern int COM_Send(byte cmd, byte data1, byte data2);public FormTB()
{
InitializeComponent();
}//这里以调用DLL里的OpenCOM()为例public Thread rec;private void FormTB562_Load(object sender, EventArgs e)
{bool op= OpenCOM(); //调用DLL的函数
Console.WriteLine(" op = " + op);
}
}
}

b8a0391156967941265c11fcd0b13180.png

如上程序所示,
  (1)调用dll需要引用命名空间 

using System.Runtime.InteropServices;

  (2) USER_COM.dll 为外部调用的DLL

  (3) CallingConvention 是指示入口点的调用约定,默认情况下,C 和 C++ 使用的 Cdecl 调用,如果 DLL 里包含有 __stdcall 的关键字, CallingConvention 要设置成                     CallingConvention.StdCall

  (4) 声明外部函数则使用 public static extern

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值