1、C++调用C#类库

1.准备C#类库(dll文件)

1.1.创建C#类库:

右击项目类库生成即可,

出现.dll(类库)与.pdb(pdb文件包含了编译后程序指向源代码的位置信息,

用于调试的时候定位到源代码,主要是用来方便调试的)两个文件。

设置仅仅生成.dll类库,可以删除.pdb文件

1.准备C++类库(dll文件)

在VS2017中新建->项目->Visual C++->Windows桌面->动态链接库;

在项目属性中->常规中选择无公共语言支持,即不创建托管C++类库;

右键头文件---》添加---》新建项(添加.h头文件)
右键源文件---》添加---》新建项(添加.cpp源文件)

代码分别:

mydll.h:

#pragma once
extern "C" _declspec(dllexport) int _stdcall add(int a,int b);

mydll.cpp:

#include "stdafx.h"
#include "mydll.h"
int _stdcall add(int a, int b)
{
return (a+b);
}

然后右键解决方案---》重新生成解决方案(先选择Release)(已经生成动态库了)

此路径

c#调用

using System;
using System.Runtime.InteropServices; namespace ConsoleAppTemp
{
class Program
{
[DllImport("DllTest.dll")] //DllImport 必须引用using System.Runtime.InteropServices;
public static extern int add(int a, int b); //可以通过EntryPoint特性指定函数入口,然后为函数定义别名
[DllImport("HelloWorldLib.dll", EntryPoint = "add")]
public static extern int CustomName(int a, int b);
static void Main(string[] args)
{
int a = add(, );
Console.WriteLine("输出结果为:" + a.ToString());
//跟上面是一样的
int b = add(, );
Console.WriteLine("输出结果为:" + b.ToString());
Console.ReadKey();
}
}
}

打开前面C++库生成的目录,将HelloWorldLib.dll复制到C#工程的Debug目录下。

也可以不复制,只需在引用dll的时候写上完整路径就行了。这里我是直接复制到Debug目录下

一、C++类库与C#类库相互调用的更多相关文章

  1. C++CLR类库封装Native类库并用C#调用 - 草稿

    1.创建Native类库 新建项目->其他语言->Visual C++->Win32控制台应用程序->DLL     添加头文件       添加源文件       选择生成路 ...

  2. C&C++——C函数与C++函数相互调用问题

    C C++相互调用 在项目中融合C和C++有时是不可避免的,在调用对方的功能函数的时候,或许会出现这样那样的问题,但只要我的C代码和我的C++代码分别都能成功编译,那其他就不是问题.近来在主程序是C语 ...

  3. C# 用XiliumCefGlue做浏览器,JS和C#相互调用

    原文:C# 用XiliumCefGlue做浏览器,JS和C#相互调用 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u013564470/artic ...

  4. ThinkPHP 3.2公共类库、应用类库ThinkPHP/Library讲解

    一.ThinkPHP的类库主要包括公共类库和应用类库,都是基于命名空间进行定义和扩展的.只要按照规范定义,都可以实现自动加载.        公共类库 公共类库通常是指ThinkPHP/Library ...

  5. C#-概念-基础类库:基础类库

    ylbtech-C#-概念-基础类库:基础类库 基础类库 (BCL) 是微软所提出的一组标准库可提供.NET Framework所有语言使用. 随着 Windows 以及 .NET Framework ...

  6. Android和JavaScript相互调用的方法

    转载地址:http://www.jb51.net/article/77206.htm 这篇文章主要介绍了Android和JavaScript相互调用的方法,实例分析了Android的WebView执行 ...

  7. 多个Activity相互调用和Intent

    MainActivity.java和OtherActivity.java的相互调用 首先MainActivity.java是Android程序自带的,新建一个类OtherActiviy extends ...

  8. JS代码和OC代码的相互调用

    JS调用OC 很多应用里面或多或少的调用了网页,来达到绚丽的效果,所谓的JS调用OC.....举个例子吧,网页上有个按钮 点击按钮跳转界面,跳转的动作由OC的代码实现. OC调用JS 还是举个例子,我 ...

  9. C程序与Lua脚本相互调用

    Lua脚本是一种可用于C程序开发/测试的工具,本篇介绍一下C程序与Lua脚本如何进行相互调用,更加详细的操作参见<Programing in Lua>.本文分为3个部分:1.Windows ...

  10. Unity3D中C#和js方法相互调用

    通过查找资料,Unity3D中C#和js要相互调用彼此的方法,js文件必须放在"Standard Assets". "Pro Standard Assets" ...

随机推荐

  1. UOJ37. 【清华集训2014】主旋律

    http://uoj.ac/problem/37 题解 题目是让我们求出有多少个边集可以使这张图强连通. 先补集转化一下,求这张图不强连通的方案数. 我们考虑这样的图缩完点之后的情况,既然不强连通,那 ...

  2. codeforces D Salary Changing

    题意:给你n个人,和s块钱,每个人都有一个工资区间,你给所有人都发工资.然后要他们工资的中位数最大. 思路:二分找那个值.那个值要满足至少有n/2+1个工资区间内. #include<cstdi ...

  3. 自定义类实现原生SQL的GROUP_CONCAT的功能

    大家都知道,原生的SQL为我们提供了分组之后查找组内数据的办法:GROUP_CONCAT方法:但是对于用Django开发的程序员来说-Django自带的ORM并没有内置这样功能的方法,而每一次遇到这样 ...

  4. hive三种方式区别和搭建

    Hive 中 metastore(元数据存储)的三种方式:         a)内嵌 Derby 方式         b)Local 方式          c)Remote 方式    第一种方式 ...

  5. Linux_FTP服务器

    目录 目录 FTP FTP Server FTP configuration Global config Anonymous user FTP Config Virtual user FTP Loca ...

  6. TestNG 多线程测试

    TestNG以注解的方式实现多线程测试 import org.testng.annotations.Test; public class TreadDemo { // invocationCount ...

  7. MYSQL5.5 linux 多实例

    安装过程 cmake 安装参照上一篇 https://www.cnblogs.com/lixuchun/p/9240888.html 多实例采用 /data 目录作为mysql多实例的总的根目录,然后 ...

  8. 简单DP入门(一) 数字三角形

    数字三角形

  9. 并查集入门(hdu1232“畅通工程”)

    在学习并查集之前,首先需要明白基本的并查集可以完成的功能.并查集主要是用于处理不相交集合的合并问题.它是一种基础算法,在离散数学中,可以利用并查集求一个图的连通分支,利用其这个特性可以为我们解决一系列 ...

  10. 使用 Spring HATEOAS 开发 REST 服务

    使用 Spring HATEOAS 开发 REST 服务 学习博客:https://www.ibm.com/developerworks/cn/java/j-lo-SpringHATEOAS/ htt ...