当前位置: 代码网 > it编程>编程语言>C# > C#调用C++使用C++/CLI的实现

C#调用C++使用C++/CLI的实现

2024年05月15日 C# 我要评论
简介c++/cli(c++ common language infrastructure)是一种允许在 .net 平台上创建托管代码(managed code)和非托管代码(unmanaged cod

简介

c++/cli(c++ common language infrastructure)是一种允许在 .net 平台上创建托管代码(managed code)和非托管代码(unmanaged code)之间互操作的语言。其原理可以概括如下:

  • 编译器支持: c++/cli 编译器能够编译同时包含托管和非托管代码的源文件。这使得在同一个项目中可以混合使用 c++ 和 c# 或其他 .net 语言。

  • 托管和非托管代码的桥梁: c++/cli 提供了语法和关键字,允许你在同一个文件中编写托管代码和非托管代码。这些代码可以相互调用,使得 c# 和 c++ 之间的交互变得简单。

  • clr(common language runtime)集成: c++/cli 代码在编译时会生成对 clr 的调用,因此它可以利用 clr 提供的各种功能,例如垃圾回收、类型安全性和异常处理等。

  • 托管代码的封装: 在 c++/cli 中,你可以将非托管的 c++ 代码封装在托管的类中,通过公共接口暴露给其他 .net 语言。这样,c++ 的功能可以被其他 .net 语言轻松调用和使用。

  • 数据类型转换: c++/cli 提供了一组转换操作符和工具,用于在托管代码和非托管代码之间进行数据类型的转换。这样,你可以在 c++/cli 中轻松处理 c# 中的数据类型,反之亦然。

  • 资源管理: 在 c++/cli 中,你可以使用托管的资源管理功能(如 gcnew 创建托管对象和 delete 销毁对象),同时也可以手动管理非托管资源(如使用析构函数释放内存)。

新建解决方案->csharpcplussolution

新建动态链接库(dll)->cplusnative

新建类nativecalculate

//nativecalculate.h

#pragma once
#ifndef native_class_h
#define native_class_h

class __declspec(dllexport) nativecalculate {
public:
static int add(int a, int b);
};

#endif // native_class_h
//nativecalculate.cpp

#include "pch.h"
#include "nativecalculate.h"

int nativecalculate::add(int a, int b) {
    return a + b;
}

build cplusnative项目确保能成功生成cplusnative.dll和cplusnative.lib文件

新建cli类库(dll)->cpluswrapper

添加包含目录 nativecalculate.h

添加 cplusnative.lib附加库目录

添加附加库依赖项 cplusnative.lib

创建包装类nativecpluswrapper

上述配置完毕后,cpluswrapper项目创建包装类nativecpluswrapper

//nativecpluswrapper.h

#pragma once
using namespace system;
namespace cpluswrapper {
    public ref class nativecpluswrapper
    {
    public:
        static int add(int a, int b);
    };
}
//cpluswrapper.cpp

#include "pch.h"
#include "nativecpluswrapper.h"
#include "nativecalculate.h"

using namespace cpluswrapper;

int nativecpluswrapper::add(int a, int b) {
    int sum = 0;
    sum = nativecalculate::add(a, b);
    return sum;
}

build cpluswrapper项目确保能成功生成cpluswrapper.dll文件

新建c# 控制台项目 csharpconsoleapp

添加cpluswrapper.dll引用

csharpconsoleapp项目调用nativecpluswrapper方法

namespace csharpconsoleapp
{
    class program
    {
        static void main(string[] args)
        {
            int sum = cpluswrapper.nativecpluswrapper.add(33, 66);
        }
    }
}

常见错误

程序运行目录找不到cplusnative.dll所以报错

拷贝cplusnative.dll 到 debug目录下即可

或者使用pre-build event command line

"$(projectdir)..\debug\cplusnative.dll" "$(targetdir)"

到此这篇关于c#调用c++使用c++/cli的实现的文章就介绍到这了,更多相关c#调用c++ 内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com