在VS2015中用C++创建DLL并用C#调用且同时实现对DLL的调试

from:http://m.blog.csdn.net/article/details?id=51075023

在VS2015中先创建C#项目,然后再创建要编写的动态库DLL项目,这样做的好处是整个解决方案的编程环境是C#模式,这样就可以有很多智能的提示或快捷的编程方式在整个解决方案中都可以使用。

一:创建C#控制台应用程序:用于调用C++编写的DLL

(1)启动VS2015》文件》新建》项目,在弹出的新建项目对话框中按下图进行选择填写,先填写项目的名称,再修改解决方案的名称。

clip_image001

(2)项目创建后,整体效果如下图:

clip_image002

二:用C++创建DLL

下面仅仅创建了DLL,具体创建DLL的讲解请参考【在VS2015中用C++编写可被其它语言调用的动态库DLL】

(1)在解决方案上右击选择【添加】>【新建项目】

clip_image003

(2)在添加新项目对话框中,按下图进行选择填写

clip_image004

(3)在下图的创建向导对话框中进行如下选择

clip_image005

(4)在下图的创建向导对话框中进行如下选择

clip_image006

(5)项目创建后,整体效果如下图:

clip_image007

(6)在【头文件】上右击进行如下选择

clip_image008

(7)在添加新项对话框中进行如下选择填写

clip_image009

(8)在CreateDLL.cpp文件中添加对CreateDLL.h的引用并且添加下图所示测试代码

clip_image010

(9)在CreateDLL.h文件中添加下图所示测试代码

clip_image011

(10)在【源文件】上右击进行如下选择

clip_image012

(11)在添加新项对话框中进行如下选择填写

clip_image013

(12)在CreateDLL.def文件中添加下图所示测试代码

clip_image014

(13)先将解决方案切换到Release模式,再在CreateDLL项目名称上右击选择【生成】或【重新生成】

注:Release模式下生成的DLL才是最终的,Debug模式下生成的DLL有时会出问题

clip_image015

(14)在解决方案所在的目录中打开Release文件夹即可看到生成的DLL

clip_image016

(15)用Dependency Walker查看导出函数名是否正确,直接将CreateDLL.dll拖到Dependency Walker软件界面即可,如下图

clip_image017

(16)使用DLL函数查看器(3.5)查看导出函数名和参数数量是否正确,直接将CreateDLL.dll拖到DLL函数查看器(3.5)软件界面即可,如下图

clip_image018

三:用C#项目调用C++创建DLL

(1)将C#项目设置为启动项目,并且将解决方案设置为Debug模式

clip_image019

(2)在C#项目的program.cs文件中编写如下代码,代码中DLL的路径中的斜杠,测试发现左斜、右斜都可以,代码中的相对路径指的是:编译后的exe程序相对于DLL的路径

using System;

using System.Collections.Generic;

using System.Linq;

using System.Runtime.InteropServices;

using System.Text;

using System.Threading.Tasks;

namespace CSharpCallDLL

{

class Program

{

[DllImport(@"../../../Debug/CreateDLL.dll", EntryPoint = "test01", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]

extern static int test01(int a, int b, int c);

[DllImport(@"../../../Debug/CreateDLL.dll", EntryPoint = "test02", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]

extern static int test02(int a, int b);

static void Main(string[] args)

{

int r1 = test01(1, 2, 3);

int r2 = test02(5, 2);

Console.WriteLine("test01结果:" + r1.ToString());

Console.WriteLine("test02结果:" + r2.ToString());

Console.ReadKey();

}

}

}

(3)运行C#项目输出结果如下

clip_image020
(4)若想实现C#调用DLL时自动进入到C++项目设置的断点,需在C#工程右键【属性】->【调试】->【启动调试器】中选中【启动本机代码调试】

clip_image021

(5)在C++项目的源码中设置断点,在Debug模式下运行C#程序会自动跳到断点处,如下图,从中可以看到C#项目中的值已经传到C++项目中了

clip_image022

(6)源码下载地址:在VS2015中用C++创建DLL并用C#调用且同时实现对DLL的调试源码

(7)Dependency Walker软件下载地址:Dependency Walker动态库导出函数查看器

(8)DLL函数查看器(3.5)软件下载地址:DLL函数查看器(3.5)

转载于:https://www.cnblogs.com/94cool/p/5772376.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/397838.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(转)CocosCreator零基础制作游戏《极限跳跃》二、制作游戏开始场景

CocosCreator零基础制作游戏《极限跳跃》二、制作游戏开始场景 我们刚刚分析了《极限跳跃》这款游戏,下面我们开始制作第一个游戏场景,也就是游戏的开始场景。 首先,打开CocosCreator,新建HelloWorld项目。选择项目路径&#xff0…

连接池超时配置_HttpClient连接池的一些思考

前言使用apache的httpclient进行http的交互处理已经很长时间了,而httpclient实例则使用了http连接池,想必大家也没有关心过连接池的管理。事实上,通过分析httpclient源码,发现它很优雅地隐藏了所有的连接池管理细节,开…

视图和模型变换

视图变换,是指变换照相机的位置,角度。 模型变换,是指变换被照物体的位置,角度。 这两个变换,都会影响最终图形中,物体的位置,角度。而这两个变换,可以达到相同的效果。比如&#x…

鸿蒙os全面升级,华为突然宣布,鸿蒙OS正式版6月底全面升级,幸福来得太突然...

原标题:华为突然宣布,鸿蒙OS正式版6月底全面升级,幸福来得太突然摘要:早在今年2月华为Mate X2折叠屏新品发布会上,余承东曾表示,鸿蒙OS正式版将于今年4月份全面上线。或许是因为华为宣布卖车分散了很多的精…

eclipse启动失败:An internal error occurred during: reload maven project

2019独角兽企业重金招聘Python工程师标准>>> 1.找到workspace文件夹下的/.metadata文件夹,将其删除掉,然后在讲项目重新导入进去eclipse中。但是这个有一点不好的地方,之前对eclipse所做的配置也会恢复为默认配置 2.在.metadata下…

skt7850鸿蒙策略,lol 英雄联盟 SKT状态回暖轻取外卡,SUP难挡Faker

MSI 第四日 SUP vs SKT双方bpBAN LISTBAN:SUP:流浪 牛头 豹女SKT:巴德 妖姬 鱼人PICKSUP:大树 男枪 冰女 卢锡安 锤石SKT:艾克 千珏 沙皇 EZ 布隆比赛开始,双方正常对线开局。前期下路锤石多次勾中ez,男枪也来逼出EZ布…

spring集成struts2

Struts2前身是WebWork,核心并没有改变,其实就是把WebWork改名为struts2,与Struts1一点关系没有。 Struts2中通过ObjectFactory接口实现创建及获取Action实例,类似于Spring的IoC容器,所以Action实例可以由ObjectFactory…

Android学习之查看网络图片

在这里小编学习了查看网络图片的小案例,: 初始界面: 点击浏览后,效果如下: 需要注意的是 该案例需要获取联网权限,即: <uses-permission android:name"android.permission.INTERNET"/>具体步骤如下: 1.定义并初始化控件: private EditText etImageUrl;private …

vue 转为静态html,Vue CLI 3使用:HTML和静态资源(五)

HTMLpublic/index.html 文件是一个会被 html-webpack-plugin 处理的模板。构建中&#xff0c;各种资源路径会被注入解析。可以使用 lodash template 语法插入内容。用来做不转义插值&#xff1b;用来做 HTML 转义插值&#xff1b;用来描述 JavaScript 流程控制。除了被 html-we…

从html导出带样式的excel,Jquery导出带样式的Excel

工作中做导出的时候&#xff0c;需要导出自定义的表格或嫌弃导出的Excel格式太难看了。需要设置颜色、字号大小、加粗、合并单元格等等。特性&#xff1a;支持过滤 某个位置支持过滤 img 标签支持过滤 a 标签支持过滤 input 标签支持包含 行内样式。HTML页面&#xff1a;HTML页…

云计算机创意名,有创意的道路名字推荐,分享一些好听有内涵的路名

提到龙岗板块&#xff0c;“风向”一直飘忽不定。原本地铁4号线今年通车&#xff0c;但是因为五象火车站的规划建设&#xff0c;暂时未开通;机场线已经敲定&#xff0c;然而没有龙岗的份…… [本文来自&#xff1a;www.777y.com]虽然机场线暂时无缘(可以期待下)&#xff0c;但是…

250W电源带i7+GTX1080?

电源的科学: Q1&#xff1a;电源的额定功率是什么&#xff1f;峰值功率又是什么&#xff1f;A1&#xff1a;电源的额定功率就是电源正常工作时的功率&#xff0c;它的值为用电器的额定电压乘以额定电流。而峰值功率指的是电源短时间内能达到的最大功率&#xff0c; 一般情况下电…

2018清华计算机类专业录取分数线,清华大学2018年各省录取分数线及各专业录取分数线 - 高教网...

【一批录取分数线】港澳台联招&#xff1a;630分安徽&#xff1a;理科689分&#xff1b;文科675分&#xff1b;理科定向683分北京&#xff1a;理科694分&#xff1b;文科677分福建&#xff1a;理科681分&#xff1b;文科650分甘肃&#xff1a;理科652分&#xff1b;文科637分广…

怎么用计算机连接电视,电脑怎么连接电视 详细步骤【图文】

现在一般的LED电视机都有连接电脑的功能&#xff0c;如何让电脑连接电视&#xff0c;让电视的大屏幕成为电脑的显示器呢?下面给大家说明电脑连接电视详细步骤!电脑连接电视步骤&#xff1a;1 电脑连接电视所需的接口及连接线我们先来介绍一下&#xff0c;电视上需要的接口&…

4r照片尺寸是多大_数码照片4D、4R、6RW是什么意思,怎样调整4D照片尺寸?

数码照片4D、4R、6RW是什么意思,怎样调整4D照片尺寸?数码相机和DV进入寻常百姓家&#xff0c;有些朋友希望把外出旅游或者居家时拍的照片冲印出来&#xff0c;但是一些朋友对里面的专业说法不太熟悉&#xff0c;比如3R,4R,4D,5D,5R,6R等照片的规格和尺寸不清楚&#xff0c;其实…

html自定义列表 嵌套,HTML 列表

HTML 支持有序、无序和定义列表:HTML 列表有序列表The first list itemThe second list itemThe third list item无序列表List itemList itemList item在线实例无序列表本例演示无序列表。有序列表本例演示有序列表。(可以在本页底端找到更多实例。)HTML无序列表无序列表是一个…

shiro会话监听_SpringBoot集成Shiro会话管理

在Shiro中我们可以通过org.apache.shiro.session.mgt.eis.SessionDAO对象的getActiveSessions()方法方便的获取到当前所有有效的Session对象。通过这些Session对象&#xff0c;我们可以实现一些比较有趣的功能&#xff0c;比如查看当前系统的在线人数&#xff0c;查看这些在线用…

【原创】吟端午

《吟端午》人间六月艳阳天&#xff0c;粽子飘香不等闲。自古离骚东流水&#xff0c;九州沧海变桑田。创作时间&#xff1a;2016年06月08日创作背景&#xff1a;受人之约&#xff0c;赋诗为题&#xff01;转载于:https://blog.51cto.com/yanhuasanyue/1842346

dom对象常用的属性和方法有哪些?

dom对象常用的属性和方法有哪些&#xff1f; 一、总结 一句话总结&#xff1a; 1、document属性和方法&#xff1a;document的属性有head&#xff0c;body之类&#xff0c;方法有各种获取element的方法 2、element的属性和方法&#xff1a;属性比如style&#xff0c;innerHTML和…

html左中右自适应布局,CSS左中右自适应布局六种方案与原理

css虽简单,但细节多,技巧性高,易学难精。如何实现左右固定300px , 中间宽度自适应&#xff1f;有如下结构左右中公有样式, 设置高,设置左右宽度固定300px,左右为红色&#xff0c;中间为黄色。.item {height: 400px;}.left,.right {width: 300px;background: #f00;}.center {bac…