C#调用C++使用C++/CLI的实现
简介
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++ 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
C#使用SqlSugarClient进行数据访问并实现了统一的批量依赖注入(示例代码)
M为 BaseDto 请用C# 给出一个案例,支持不同表对应不同的业务逻辑层,然后不同仓储实例,不同表的业务,都实现统一的批量依赖注入,下面通过示例给大家演示如何使用SqlSugarClient进行数据访问,并实现了统一的批量依赖注入,感兴趣的朋友跟随小编一起看看吧2024-05-05c# Rank属性与GetUpperBound方法的深入分析
本篇文章是对c#中的Rank属性与GetUpperBound方法进行了详细的分析介绍,需要的朋友参考下2013-06-06
最新评论