松一160

中国实习生

在VS2015中用C++创建动态库并用C#调用

VS2015用C++创建动态库DLL步骤如下:

(1)启动VS2015》文件》新建》项目,按下图进行选择填写,选择Win32控制台应用程序或Win32项目都可以,这两相都会弹出相同的创建窗口,如第二张图,第三张图。


(2)在Win32应用程序向导对话框中选择【下一步】


(3)按下图进行勾选

导出符号作用:生成的代码中会自动包含一个导出变量、一个导出函数和一个导出类的示例,并且对应的.h文件中也会创建相应的导出操作,可加快程序开发。

预编译头作用:VS 默认情况下会创建并使用预编译头文件(也就是自动创建 StdAfx.h 和 StdAfx.cpp 这两个文件),以便在编译时加快编译速度,预编译器将它编译后,会生成一                               个 Pre-compiled header ,也就是 pch 文件,这样下次就可以直接使用这里已经编译好了的代码了。


(4)整个测试项目创建后,整体效果如下图:


(5)将DLLTest.cpp中红色框内VS自动创建的示例代码删除掉


(6)将DLLTest.h中红色框内VS自动创建的示例代码删除掉


(7)DLLTest.cpp中添加如下图红色框中的函数Test1和Test2,其中一个有参数,一个无参数


(8)DLLTest.h中添加函数Test1和Test2的导出形式,注意是EXTERN_C,以C语言函数名导出可以保证导出的函数名不变


(9)生成解决方案,此时在项目的目录的Debug文件夹下会看到生成的DLL,如下图


VS2015用C#调用刚才C++创建动态库DLL步骤如下:

(1)在解决方案上右击进行如下图所示选择


(2)按下图进行选择,创建C#控制台程序(控制台程序比较方便所以没建其它C#程序)调用C++创建的DLL


(3)创建后的整体效果如下图:


(4)因为要用到DllImport,所以先导入命名空间using System.Runtime.InteropServices;

          打开Program.cs文件并添加下图所示代码:

          注意在DllImport导入C/C++编写的动态库时函数,加上CallingConvention = CallingConvention.Cdecl,来指定入口点的调用约定,否则有可能会               出现下面第二张图提示错误,因为C/C++在导出时默认的调用约定是_cdecl,详细剖析见下篇博客【VS2015用C++创建的动态库导出函数名乱码原因分析】。



(5)在CallDll项目上右击选择【设为启动项目】,然后运行程序,结果如下图所示:


阅读更多
版权声明:本文为【CSDN博主:松一160】原创文章,未经允许不得转载。 https://blog.csdn.net/songyi160/article/details/50741329
文章标签: c# C++ DLL VS2015
个人分类: DLL
想对作者说点什么? 我来说一句

c++ 动态链接库

2013年03月26日 1.61MB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭