C#调用C++生成的动态链接库DLL
一、背景
由于要使用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
C#调用C++生成的动态链接库DLL的更多相关文章
- 编译可供C#调用的C/C++动态链接库dll文件
编译可供C#调用的C/C++动态链接库dll文件,C语言控制台应用程序,探索生成dll过程 由于项目需求,需要公司另一个团队提供相关算法支持,是用C语言编译好的dll库提供给我们进行调用. 但是拿到d ...
- Qt调用VC++生成的动态链接库
Qt如何调用VC++生成的动态链接库?假设当前有VC++编译器生成的动态库文件testdll.h,testdll.lib和testdll.dll. testdll.h文件源码如下: #ifdef TE ...
- Qt不同版本编译器,调用VC++生成的动态链接库
今天用QT编译生成的共享库自己却怎么都不能调用,查了N久后找到这个帖子,发现搞定了,记录一下 http://qiusuoge.com/12720.html Qt如何调用VC++生成的动态链接库?假设当 ...
- python中使用ctypes调用MinGW生成的动态链接库(dll)
关于gcc编译dll的我就不说了,网上举例一大堆,下面以g++为例. 假设有一个test.cpp文件如下: extern "C" { __declspec(dllexport) d ...
- Java採用JNI调用VC++生成的dll(Java与C++交互)
应项目需求,须要android调用java,java再调用C++实现android一个图片匹配的功能,我们作为java组须要和C++和Android进行交互.以下是java和C++採用JNI的方式进行 ...
- asp.net下调用Matlab生成动态链接库
对于这次论文项目,最后在写一篇关于工程的博客,那就是在asp.net下调用matlab生成的dll动态链接库.至今关于matlab,c/c++(opencv),c#(asp.net)我总共写了4篇配置 ...
- VS2010编写动态链接库DLL及单元测试用例,调用DLL测试正确性
转自:http://blog.csdn.net/testcs_dn/article/details/27237509 本文将创建一个简单的动态链接库,并编写一个控制台应用程序使用该动态链接库,该动态链 ...
- LR调用动态链接库DLL
什么是动态库? 动态库一般又叫动态链接库(DLL),是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库. 动态链接提供了一种方法 ,使进程可以 ...
- 在C#调用C++的DLL方法(一)生成非托管dll
C#与C/C++相比,前者的优势在于UI,后者的优势在于算法,C++下的指针虽然恶心,若使用得当还是相当方便的,最重要的问题是,市面上很多流行的开发工具库,几乎没有不支持C++的,但全面支持C#只能说 ...
随机推荐
- 三星N900(note3)刷机包 颓废N0.8.1 修复已知BUG 集成谷歌服务
ROM介绍 8.1更新信息:攻克了来电后点击HOME出现SECPHONE已经停止的问题 去掉了桌面隐藏信息的选项,官方最新底包暂不支持这功能 增加了网友们须要验证的谷歌服务(不须要的同学同步什么的都关 ...
- GitHub开源控件的使用合集
Android的加载动画AVLoadingIndicatorView 项目地址: https://github.com/81813780/AVLoadingIndicatorView 首先,在 bui ...
- 《Android编程权威指南》CriminalIntent项目梳理
相信很多新手或者初级开发人员都已经买了第2版的<Android编程权威指南>, 这本书基于Android Studio开发,对入门人员来说是很好的选择,但是很可惜的是, 在完成一个项目后, ...
- string类自定义字符串替换函数replace
#include <iostream> #include <string> using namespace std; /* * 函数功能:将string字符串中的某些字符替换 ...
- [ Linux ] 釋放記憶體指令(cache) - 轉載
1. [Linux]釋放記憶體指令(cache) http://jeffreyy.pixnet.net/blog/post/84333764-%E3%80%90linux%E3%80%91%E9%87 ...
- Python(九) Python的高级语法与用法
本章节我们揭开Python进阶部分的高级特性,详细讲解枚举.闭包,并对函数式编程做出介绍 一. 枚举其实是一个类 from enum import Enum #枚举类 class VIP(Enum): ...
- thinkserer TD350 系统损坏后,数据恢复及系统重做过程
电脑配置: 联想服务器 TD350 E5-2609V4 2*8G 2*4T+R1 塔式 单电 1.系统恢复: 试过很多种方法,均无效 2.数据恢复: 重新安装系统后,直接在D盘查找 , 原C盘的 ...
- VBA 字符串操作(基础篇)
转自:http://blog.csdn.net/jyh_jack/article/details/2315345 mid(字符串,从第几个开始,长度) 在[字符串]中[从第几个开始]取出[长度个字符串 ...
- 【Uva 10285】Longest Run on a Snowboard
[Link]: [Description] 在一个r*c的格子上; 求最长的下降路径; [Solution] 记忆化搜索; f[x][y]表示从(x,y)这个格子往下还能走多远; 因为是严格递增,所以 ...
- hdu4565---So Easy!(矩阵)
Problem Description A sequence Sn is defined as: Where a, b, n, m are positive integers.┌x┐is the ce ...