一、背景

由于要使用C#写app,所以要把C++生成的DLL在C#中调用,所以就涉及怎样去调用外部的dll问题。

二、C#调用外部DLL

首先先看下C#调用外部DLL的代码

using System.Runtime.InteropServices;

namespace WzCan_DeviceExploer
{
public partial class Form2 : Form
{ [DllImport("testmaster.dll", EntryPoint = "WzCanOpenInit", CallingConvention = CallingConvention.StdCall)] //CallingConvention指示入口点的调用约定
public static extern int WzCanOpenInit(int DevIndex); //声明DLL中的函数WzCanOpenInit,要注意要在函数前加上 public static extern
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
int res;
res = WzCanOpenInit(0); //外部dll在C#中的调用
this.Close(); //关闭当前CAN SETTING窗口
}
private void button2_Click(object sender, EventArgs e)
{
this.Close(); //退出当前CAN SETTING窗口
}
}
}

如上程序所示,

1)调用dll需要引用命名空间 using System.Runtime.InteropServices

2)testmaster.dll为外部的dll,程序启动时还需将其放在Dubug文件夹中,否则启动不了。

3) CallingConvention是指示入口点的调用约定,默认情况下,C和C++使用的Cdecl调用,但由于DLL在C++的函数TESTMASTER_API DWORD __stdcall WzCanOpenInit(DWORD DevIndex),包含有__stdcall的关键字,所以 CallingConvention要设置成CallingConvention.StdCall

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

三、参考文档

http://www.cnblogs.com/kevin-top/archive/2010/06/04/1751425.html //C#调用外部DLL

http://www.xuebuyuan.com/645807.html //C# 导入dll时CallingConvention的设置问题

by 羊羊得亿

2017-06-16 ShenZhen

最新文章

  1. EJB的调用
  2. asp.net教程:GridView导出到Excel或Word文件
  3. 纸上谈兵:左倾堆(leftist heap)
  4. 【转】MSMQ消息队列安装
  5. DBMS_SCHEDULER and DBMS_JOB
  6. 【转】Android 混淆代码总结
  7. python getpass模块:隐藏不显示输入的密码
  8. Shell的学习就从重装系统开始吧
  9. MS Sql Server 消除重复行 保留信息完整的一条 2011-11-26 13:19(QQ空间)
  10. android usb挂载分析----vold启动
  11. Document Classification
  12. JDK1.8源码阅读系列之四:HashMap (原创)
  13. Spring+SpringMVC+MyBatis深入学习及搭建(一)——MyBatis的基础知识
  14. 我的第一个python web开发框架(21)——小结
  15. 【USACO Feb 2014】Cow Decathlon
  16. ind2sub
  17. node Sream
  18. graphql-modules 企业级别的graphql server 工具
  19. unity3d绘画手册-------地形高度调节
  20. StreamWrite类

热门文章

  1. Vue进阶之表单控件绑定
  2. BZOJ 1112 线段树
  3. Weka中数据挖掘与机器学习系列之Weka Package Manager安装所需WEKA的附加算法包出错问题解决方案总结(八)
  4. OPENCV(2) —— Basic Structures(一)
  5. AtCoder Beginner Contest 067 C - Splitting Pi
  6. mysql源码安装(包括5.5和5.7)
  7. 【Docker基本操作】
  8. hdparm
  9. CI框架源代码阅读笔记6 扩展钩子 Hook.php
  10. android framework 01