在VS2015中用C++创建DLL并用C#调用且同时实现对DLL的调试
from:http://m.blog.csdn.net/article/details?id=51075023
在VS2015中先创建C#项目,然后再创建要编写的动态库DLL项目,这样做的好处是整个解决方案的编程环境是C#模式,这样就可以有很多智能的提示或快捷的编程方式在整个解决方案中都可以使用。
一:创建C#控制台应用程序:用于调用C++编写的DLL
(1)启动VS2015》文件》新建》项目,在弹出的新建项目对话框中按下图进行选择填写,先填写项目的名称,再修改解决方案的名称。

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

二:用C++创建DLL
下面仅仅创建了DLL,具体创建DLL的讲解请参考【在VS2015中用C++编写可被其它语言调用的动态库DLL】
(1)在解决方案上右击选择【添加】>【新建项目】

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

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

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

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

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

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

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

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

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

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

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

(13)先将解决方案切换到Release模式,再在CreateDLL项目名称上右击选择【生成】或【重新生成】
注:Release模式下生成的DLL才是最终的,Debug模式下生成的DLL有时会出问题

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

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

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

三:用C#项目调用C++创建DLL
(1)将C#项目设置为启动项目,并且将解决方案设置为Debug模式

(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#项目输出结果如下
(4)若想实现C#调用DLL时自动进入到C++项目设置的断点,需在C#工程右键【属性】->【调试】->【启动调试器】中选中【启动本机代码调试】

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

(6)源码下载地址:在VS2015中用C++创建DLL并用C#调用且同时实现对DLL的调试源码
(7)Dependency Walker软件下载地址:Dependency Walker动态库导出函数查看器
(8)DLL函数查看器(3.5)软件下载地址:DLL函数查看器(3.5)
在VS2015中用C++创建DLL并用C#调用且同时实现对DLL的调试的更多相关文章
- 在VS2015中用C++创建DLL并用C++调用且同一时候实现对DLL的调试
一:用C++创建DLL 依照[在VS2015中用C++编写可被其他语言调用的动态库DLL]提示创建C++编写的DLL.或參考[在VS2015中用C++创建DLL并用C#调用且同一 ...
- 在VS2015中用C++编写可被C#调用的DLL
VS2015用C++创建动态库DLL步骤如下: (1)启动VS2015-->文件-->新建-->项目,按图二进行选择,选择Win32项目,弹出创建窗口,如第二张图.注意.net版本根 ...
- Reflector+Reflexil 相结合实现对DLL文件修改
在工作过程中,我们有可能遇到这样的问题:公司发给客户的软件包突然报错了,但是你知道哪里报错了,而这个代码已经编译成DLL文件了,源代码不在自己这里.怎么办呢?还好现在有Reflexil插件,这个插件只 ...
- Delphi 中的DLL 封装和调用对象技术(刘艺,有截图)
Delphi 中的DLL 封装和调用对象技术本文刊登2003 年10 月份出版的Dr.Dobb's 软件研发第3 期刘 艺摘 要DLL 是一种应用最为广泛的动态链接技术但是由于在DLL 中封装和调用对 ...
- 在VS2015中用C++编写可被其它语言调用的动态库DLL
转自:http://blog.csdn.net/songyi160/article/details/50754705 VS2015用C++创建动态库DLL步骤如下: (1)启动VS2015>文件 ...
- 创建一个C++制作的包含Opencv功能的dll,供C#程序使用
目的:获取某图片指定位置的颜色. 实现该目的的方法有很多,但为了有助于扩充自己技术广度,所以决定采用标题中的方法来完成. 没有C++编程经验,也没有制作C++版Opencv语法经验,也没有制作dll的 ...
- delphi 创建DLL文件 及其调用和注意事项
首先创建一个DLL文件,项目自带的代码为: library ProjectPnr; { Important note about DLL memory management: ShareMem mus ...
- VS2015 C# 编写USB通信上位机时,改变net框架导致DLL调用失败的问题解决方法
最近在写USB通信的上位机,调用了windows里的DLL,开发环境:64位WIN7 .VS2015.NET4.5.2:开发完成后在自己的电脑可用,在32位电脑.NET其他版本以及WIN10的环境下不 ...
- c++ 生成dll文件并调用-转
.h(头文件) .lib(库文件) .dll(动态链接库文件) 之间的关系和作用的区分 .h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的. 附加依赖项的是.lib不是.dll, ...
随机推荐
- KVO的底层实现
1.KVO是基于Runtime机制实现的: 2.当某个类的对象的某个属性第一次被观察时,系统会在运行期间动态地创建该类的一个派生类,在这个派生类中重写基类的任何被观察属性的setter方法,派生类在被 ...
- LBS上传到百度地图
准备: 第一步:注册百度地图开发者账号 第二步:使用开发者账号注册相对应秘钥 在LBS后台添加所需要上传的字段 1,添加WebClientHelper帮助类 2,LBS帮助类 private stri ...
- MySQL 常见的sql命令
注意事项: 1.sql 使用单引号来环绕文本值(大部分数据库系统也接受双引号).如果是数值,请不要使用引号. 一.数据库 1.创建数据库 CREATE DATABASE lesson ; 创建一个名字 ...
- 初学Spring有没有适合的书
初学者之前没有阅读java框架源码的习惯.没有阅读过源码,知道整体流程么?知道依赖注入的概念么?知道aop么?知道其中用到了哪些设计模式么?再说了,如果一上手就是源码?难道你没有注意到Spring的类 ...
- vs出现“已经在解决方案中打开了具有该名称的项目”问题的解决方案
经过本人测试,这种问题一般出现在装了svn的项目. 其实删除了删除sln和csproj文件中的SVN配置信息就行了 需要删除的信息 sln文件中: GlobalSection(SubversionSc ...
- WPExpress78_update 离线包
http://115.com/lb/5lb7rnbr#Windows Phone SDK update for WP 7.8115网盘礼包码:5lb7rnbr 使用/layout下载的,相信很多朋友已 ...
- 2.3 CMMI2级——项目跟踪和控制(Project Monitoring and Control)
计划不是用来看的,是用来执行的.PP讲述了如何做计划,PMC讲述的就是如何跟踪计划的执行并在实际情况偏离计划时采取纠正行动. 我们先看看SG1,SG1讲述的是如何根据计划来跟踪计划的执行问题. SG1 ...
- 关于input全选反选恶心的异常情况
上一篇讲到:第一次点击全选按钮input显示对勾,第二次则不显示,需要用prop来添加checked属性. 但是用prop会出现一个问题,对勾显示,而checked属性不会被添加(比如:$(" ...
- 在VC环境下执行代码出现错误
这是在执行代码过程中出现的错误,源代码在别的电脑上能运行,在自己的VC里运行就出现错误,在网上也搜过解决办法,但还是有点不太理解,是编程环境的问题h还是代码本身也存在问题???
- ORACLE查看数据文件包含哪些对象
在上篇ORACLE查看表空间对象中,我介绍了如何查询一个表空间有那些数据库对象,那么我们是否可以查看某个数据文件包含那些数据库对象呢?如下所示 SELECT E.SEGMENT_TYPE ...