C#調用C++使用C++/CLI的實現
簡介
C++/CLI(C++ Common Language Infrastructure)是一種允許在 .NET 平臺上創(chuàng)建托管代碼(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創(chuàng)建托管對象和delete銷毀對象),同時也可以手動管理非托管資源(如使用析構函數釋放內存)。
新建解決方案->CSharpCPlusSolution

新建動態(tài)鏈接庫(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

創(chuàng)建包裝類NativeCPlusWrapper
上述配置完畢后,CPlusWrapper項目創(chuàng)建包裝類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++ 內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
c# asp .net 動態(tài)創(chuàng)建sql數據庫表的方法
c# asp .net 動態(tài)創(chuàng)建sql數據庫表的方法,需要的朋友可以參考一下2013-04-04
Unity?UGUI的EventSystem事件系統(tǒng)組件介紹使用
這篇文章主要為大家介紹了Unity?UGUI的EventSystem事件系統(tǒng)組件介紹使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-07-07

