博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在VS2015中用C++创建DLL并用C#调用且同时实现对DLL的调试
阅读量:7056 次
发布时间:2019-06-28

本文共 2260 字,大约阅读时间需要 7 分钟。

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

 

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

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

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

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

二:用C++创建DLL

下面仅仅创建了DLL,具体创建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)源码下载地址:

(7)Dependency Walker软件下载地址:

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

转载于:https://www.cnblogs.com/alps/p/5591542.html

你可能感兴趣的文章
bootstrap提供了六种列表效果
查看>>
LAMP+LogAnalyzer日志服务器环境搭建
查看>>
split、replace、indexof、substr 用法 (获取后台富文本框内容,截取图片)
查看>>
怎样在 ubuntu 上安装 Linux 3.11 内核
查看>>
php 字符串分割函数split
查看>>
Bex5自动编号相关函数和用法
查看>>
机柜就是数据中心
查看>>
详解NetAppFAS3220数据恢复操作方法
查看>>
容器与依赖注入
查看>>
老男孩Linux运维决心书
查看>>
VIM常用快捷键
查看>>
网络交换机对无线网络中安全威胁的防御和缓解
查看>>
我的友情链接
查看>>
版权之争,谁更棋高一着?
查看>>
通过Nginx架设灵活的网站静态化方案
查看>>
我的友情链接
查看>>
如何判断游标是否存在?
查看>>
Java:对象的强、软、弱和虚引用
查看>>
安装openresty1.9
查看>>
计算字符串相似度算法——Levenshtein
查看>>