文档章节

一、C++类库与C#类库相互调用

o
 osc_wws45aot
发布于 2019/08/20 21:43
字数 426
阅读 22
收藏 0

精选30+云产品,助力企业轻松上云!>>>

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(1, 2);
            Console.WriteLine("输出结果为:" + a.ToString());
            //跟上面是一样的
            int b = add(1, 2);
            Console.WriteLine("输出结果为:" + b.ToString());
            Console.ReadKey();
        }
    }
}

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

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

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
C# 开发COM组件供c++使用

C# 开发COM组件供c++使用 Microsoft在解决和以往的COM和SDK开发技术之间的互操作性(Interoperability)方面做了很多的工作,其中包括COM和.NET对象之间的相互调用以及.NET如何调用SDK中的W...

osc_ea5rlz4l
2018/08/13
5
0
C#调用C++类库的几种方式

1、 直接调用C++类库中的公共方法 使用DllImport特性对方法进行调用,比如一个C++类库SampleCppWrapper.dll中的公共方法: extern "C" declspec(dllexport) int stdcall Add(int n1, int n2)......

osc_ol21ugo9
2018/04/14
2
0
C++与C#有关对库(动态库dll,静态库.lib)文件的调用

1 动态库的相互调用 1.1 C#调用C++ dll步骤(只能导出方法): 1. c++建立空项目->源文件文件夹中添加cpp文件和函数 c++属性设置中,配置类型设置为动态库dll,公共语言运行时支持改为/clr c#...

osc_162cn79f
2018/01/24
2
0
C#如何调用C++(基础篇)

闲暇之余,记一下笔记!记录一下c#如何调用C++的动态库(dll). 步骤: 一、创建一个C++类,例如: AddOperate.h extern _declspec(dllexport) int Sum(int a, int b);class AddOperate{public...

osc_orozgpfx
2019/10/31
0
0
C# 人脸识别库

.NET 人脸识别库 ViewFaceCore 这是基于 SeetaFace6 人脸识别开发的 .NET 平台下的人脸识别库 这是一个使用超简单的人脸识别库 这是一个基于 .NET Standard 2.0 开发的库 这个库已经发布到 ...

osc_nzvfn3cl
06/26
3
0

没有更多内容

加载失败,请刷新页面

加载更多

Linux安装redis服务器和部署

Linux安装redis和部署 第一步:下载安装包 wget http://download.redis.io/releases/redis-5.0.5.tar.gz 访问https://redis.io/download 到官网进行下载。这里下载最新的5.0.5版本. 第二步:...

osc_3ytpwpyb
25分钟前
23
0
IF函数,根据条件设定输入内容

if函数通常用于条件判断,根据判断结果执行相应命令。 1.函数解释: IF(logical_test, [value_if_true], [value_if_false]) logical_test 必需。 计算结果为 TRUE 或 FALSE 的任何值或表达式...

osc_sumf8h95
26分钟前
9
0
Pytorch自定义dataloader以及在迭代过程中返回image的name

pytorch官方给的加载数据的方式是已经定义好的dataset以及loader,如何加载自己本地的图片以及label? 形如数据格式为 image1 label1 image2 label2 ... imagen labeln 实验中我采用的数据的...

osc_l8u38961
28分钟前
6
0
灯塔

\[love\ and \ share \] 我怎么感觉变成了好东西推荐呢?算了,本来也差不多 还没写完,想到再更 有好看玩的能不能评论一下,qwq 动漫 大多是些国漫,多在\(b\)站、腾讯视频、盗版小网站能够...

osc_dc6pbw3x
29分钟前
9
0
网易首页 」 网易手机 」 正文 苹果超薄触摸显示技术专利曝光:重新定义轻薄

最近,苹果公司的新屏幕专利技术已经曝光。特别是苹果公司的新型超薄触摸技术,它可以降低显示器的结构水平,消除多余的电路,并使屏幕更薄。该专利表明,这项新技术适用于iPhone,iPad,App...

osc_opzpp18v
30分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部