在VS2015中用C++编写可被C#调用的DLL
(1)启动VS2015-->文件-->新建-->项目,按图二进行选择,选择Win32项目,弹出创建窗口,如第二张图。注意.net版本根据自己项目情况选择,我是在Unity中使用,所以这里选择.net 2.0。输入项目名称,然后确定。

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

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

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

(5)在解决方案中右击【头文件】文件夹,然后右击选择【添加】-->【新建项】,在弹出的添加新项对话框中进行如下选择: 
(6)打开TestDll1.cpp并添加如下图红色框中的方法GetString1和GetString2,同时将TestDll.h头文件包含进来,两个方法分别是两种返回字符串的方式。具体如下图: 
(7)打开TestDll.h并添加方法GetString1和GetString2的导出形式,具体如下图:

注意:_stdcall定义导出函数入口点调用约定为_stdcall,加入_stdcall就可以实现导出的DLL被其它语言调用。
extern "C"说明导出函数使用C编译器,则函数名遵循C编译器的函数名修饰规则,不加extern "C"说明使用C++编译器的函数名修饰规则。
(8)生成方式选择Release,具体是选择X86还是X64根据自己需求,由于俺们项目是在X64系统运行,所以这里选择X64。具体如下图:
(9)Unity项目中C#代码使用C++生成的dll,将dll文件放到Assets-->Plugins-->x64目录下。
引入命名空 using System.Runtime.InteropServices; IntPtr转转String类型时需要。C++与C#中的String数据类型并不对应

Unity中执行结果如下:
参考资料:
https://blog.csdn.net/songyi160/article/details/50754705
在VS2015中用C++编写可被C#调用的DLL的更多相关文章
- 【C++】第1章 在VS2015中用C++编写控制台应用程序
分类:C++.VS2015 创建日期:2016-06-12 一.简介 看到不少人至今还在用VC 6.0开发工具学习C++,其实VC 6.0开发工具早就被淘汰了.这里仅介绍学习C++时推荐使用的两种开发 ...
- 在VS2015中用C++编写可被其它语言调用的动态库DLL
转自:http://blog.csdn.net/songyi160/article/details/50754705 VS2015用C++创建动态库DLL步骤如下: (1)启动VS2015>文件 ...
- 在VS2015中用C++创建DLL并用C#调用且同时实现对DLL的调试
from:http://m.blog.csdn.net/article/details?id=51075023 在VS2015中先创建C#项目,然后再创建要编写的动态库DLL项目,这样做的好处是整个解 ...
- VS2015使用C++编写DLL,并在C#环境中调用【转】
说明:本文是本人在学习封装DLL时看到的,觉得说得很清楚,为了防止忘记,特意复制下来学习用,原文链接:https://blog.csdn.net/songyi160/article/details/5 ...
- 在VS2015中用C++创建DLL并用C++调用且同一时候实现对DLL的调试
一:用C++创建DLL 依照[在VS2015中用C++编写可被其他语言调用的动态库DLL]提示创建C++编写的DLL.或參考[在VS2015中用C++创建DLL并用C#调用且同一 ...
- 【lombok】使用lombok注解,在代码编写过程中可以调用到get/set方法,但是在编译的时候无法通过,提示找不到get/set方法
错误如题:使用lombok注解,在代码编写过程中可以调用到get/set方法,但是在编译的时候无法通过,提示找不到get/set方法 报错如下: 解决方法: 1.首先查看你的lombok插件是否下载安 ...
- BCB如何编写,调用动态链接库DLL
一 编写动态链接库DLL DLL简称动态链接库,是Windows中程序的重要组成部分.想象一下,一个程序需要多人共同完成开发,怎么个共同法?这时我们就要考虑把程序分为好几个模块,团队每一个成员开发一个 ...
- VS2015 使用Razor编写MVC视图时,Razor智能提示消失,报各种红线解决方案。
打开文件夹 Users\<CurrentUser>\AppData\Local\Microsoft\VisualStudio\<version> 删除文件夹 Component ...
- Android中用layer-list编写阴影效果
要实现这种效果当然有多 种方式,比如背景图片直接加阴影效果,或者用代码画一个(onDraw()).这次我们直接用layer-list来实现.在项目 res->drawable中创建一个xml,如 ...
随机推荐
- 脚手架方式搭建vue项目
一.首先基于node环境,我想应该每一个前端开发者都应该懂的吧,这里安装运行什么的就不多说了. 搭建成功之后在文件夹的任何(如果是全局的话)一个位置都能按住shift键同时鼠标右键在工具框中就会出来一 ...
- 支持pc和移动端的手写签批功能
由于之前的业务需要,要求在pc端(用鼠标写字).移动端(手写)实现会签功能,然后百度下载了个签字插件,经过一些修改和功能添加,实现了现有的功能插件,效果如图: 代码下载地址:https://githu ...
- backref 用法
源码 def backref(name, **kwargs): """Create a back reference with explicit keyword argu ...
- PTA——找鞍点
PTA 7-56 找鞍点 #include<stdio.h> #define N 6 int main() { ; scanf("%d",&n); int a[ ...
- [spoj Favorite Dice ][期望dp]
(1)https://vjudge.net/problem/SPOJ-FAVDICE 题意:有一个n面的骰子,每一面朝上的概率相同,求所有面都朝上过至少一次的总次数期望. 题解:令dp[i]表示 i ...
- numpy的函数使用(一):np.arrange()
arrange函数用于创建等差数组. 返回一个有起点和终点固定长的list e.g.[1, 2, 3],起点是1,终点是5,步长是1.步长相当于等差数列中的公差. 参数:可以接受1.2.3个参数. 注 ...
- 数据看板superset在Windows环境下安装
@https://www.cnblogs.com/calmzeal/archive/2017/08/14/7359144.html 以下是我的安装版本与安装步骤: 1. 安装Python 3.7 , ...
- Oracle报错TNS-12532: TNS:invalid argument
今天一个同事遇到了一个oracle问题,在数据库本机通过sqlplus登录sys用户时报TNS-12532: TNS:invalid argument,这个错误. 造成这个错误的原因主要有三个,一般排 ...
- c# 中 利用 CookieContainer 对 Cookie 进行序列化和反序列化校验
private void Form1_Load(object sender, EventArgs e) { var cookieStr = @".CNBlogsCookie=1BE76122 ...
- Java递归:一个NB自慰的操作
递归的核心思想:自身调用自身 示例一:求5的阶乘 常规方法: 使用while循环 1 public class Demo01 { 2 3 public static void main(String[ ...