C#調(diào)用C++使用C++/CLI的實(shí)現(xiàn)
簡介
C++/CLI(C++ Common Language Infrastructure)是一種允許在 .NET 平臺(tái)上創(chuàng)建托管代碼(managed code)和非托管代碼(unmanaged code)之間互操作的語言。其原理可以概括如下:
編譯器支持: C++/CLI 編譯器能夠編譯同時(shí)包含托管和非托管代碼的源文件。這使得在同一個(gè)項(xiàng)目中可以混合使用 C++ 和 C# 或其他 .NET 語言。
托管和非托管代碼的橋梁: C++/CLI 提供了語法和關(guān)鍵字,允許你在同一個(gè)文件中編寫托管代碼和非托管代碼。這些代碼可以相互調(diào)用,使得 C# 和 C++ 之間的交互變得簡單。
CLR(Common Language Runtime)集成: C++/CLI 代碼在編譯時(shí)會(huì)生成對(duì) CLR 的調(diào)用,因此它可以利用 CLR 提供的各種功能,例如垃圾回收、類型安全性和異常處理等。
托管代碼的封裝: 在 C++/CLI 中,你可以將非托管的 C++ 代碼封裝在托管的類中,通過公共接口暴露給其他 .NET 語言。這樣,C++ 的功能可以被其他 .NET 語言輕松調(diào)用和使用。
數(shù)據(jù)類型轉(zhuǎn)換: C++/CLI 提供了一組轉(zhuǎn)換操作符和工具,用于在托管代碼和非托管代碼之間進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換。這樣,你可以在 C++/CLI 中輕松處理 C# 中的數(shù)據(jù)類型,反之亦然。
資源管理: 在 C++/CLI 中,你可以使用托管的資源管理功能(如
gcnew創(chuàng)建托管對(duì)象和delete銷毀對(duì)象),同時(shí)也可以手動(dòng)管理非托管資源(如使用析構(gòu)函數(shù)釋放內(nèi)存)。
新建解決方案->CSharpCPlusSolution

新建動(dòng)態(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項(xiàng)目確保能成功生成CPlusNative.dll和CPlusNative.lib文件
新建CLI類庫(DLL)->CPlusWrapper

添加包含目錄 NativeCalculate.h

添加 CPlusNative.lib附加庫目錄

添加附加庫依賴項(xiàng) CPlusNative.lib

創(chuàng)建包裝類NativeCPlusWrapper
上述配置完畢后,CPlusWrapper項(xiàng)目創(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項(xiàng)目確保能成功生成CPlusWrapper.dll文件
新建C# 控制臺(tái)項(xiàng)目 CSharpConsoleApp
添加CPlusWrapper.dll引用

CSharpConsoleApp項(xiàng)目調(diào)用NativeCPlusWrapper方法
namespace CSharpConsoleApp
{
class Program
{
static void Main(string[] args)
{
int sum = CPlusWrapper.NativeCPlusWrapper.Add(33, 66);
}
}
}常見錯(cuò)誤

程序運(yùn)行目錄找不到CPlusNative.dll所以報(bào)錯(cuò)

拷貝CPlusNative.dll 到 Debug目錄下即可
或者使用Pre-build event command line

"$(ProjectDir)..\Debug\CPlusNative.dll" "$(TargetDir)"
到此這篇關(guān)于C#調(diào)用C++使用C++/CLI的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)C#調(diào)用C++ 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#中利用Lotus notes公共郵箱發(fā)送郵件的方法
這篇文章主要給大家介紹了關(guān)于C#中利用Lotus notes公共郵箱發(fā)送郵件的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2018-02-02
C# 委托的三種調(diào)用示例(同步調(diào)用 異步調(diào)用 異步回調(diào))
本文將主要通過同步調(diào)用、異步調(diào)用、異步回調(diào)三個(gè)示例來講解在用委托執(zhí)行同一個(gè)加法類的時(shí)候的的區(qū)別和利弊2013-12-12
C#使用FluentHttpClient實(shí)現(xiàn)請(qǐng)求WebApi
FluentHttpClient 是一個(gè)REST API 異步調(diào)用 HTTP 客戶端,調(diào)用過程非常便捷,下面我們就來學(xué)習(xí)一下C#如何使用FluentHttpClient實(shí)現(xiàn)請(qǐng)求WebApi吧2023-12-12
WinForm特效之桌面上的遮罩層實(shí)現(xiàn)方法
這篇文章主要介紹了WinForm特效之桌面上的遮罩層實(shí)現(xiàn)方法,是一個(gè)非常實(shí)用的技巧,需要的朋友可以參考下2014-09-09
使用C#將Excel轉(zhuǎn)換為Markdown表格的實(shí)現(xiàn)方法
在技術(shù)文檔寫作、開源項(xiàng)目維護(hù)以及數(shù)據(jù)報(bào)告生成等場景中,Markdown 表格憑借其輕量、易讀且版本控制友好的特性,成為開發(fā)者首選的數(shù)據(jù)展示格式之一,然而,大量結(jié)構(gòu)化數(shù)據(jù)往往存儲(chǔ)在Excel文件中,索引本文將介紹如何使用C#將Excel轉(zhuǎn)換為Markdown表格,需要的朋友可以參考下2026-05-05
C#數(shù)據(jù)庫操作類AccessHelper實(shí)例
這篇文章主要介紹了C#數(shù)據(jù)庫操作類AccessHelper實(shí)例,可實(shí)現(xiàn)針對(duì)access數(shù)據(jù)庫的各種常見操作,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-10-10
C#實(shí)現(xiàn)Socket數(shù)據(jù)接收的三種經(jīng)典方式
本文將深入探討 C# 中實(shí)現(xiàn) Socket 數(shù)據(jù)接收的三種經(jīng)典方式,結(jié)合真實(shí)案例分析常見問題,并提供優(yōu)化后的完整代碼示例,希望對(duì)大家有一定的幫助2025-08-08
C#實(shí)現(xiàn)兩個(gè)DocumentDB實(shí)例之間同步數(shù)據(jù)的解決方案
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)兩個(gè)DocumentDB實(shí)例之間同步數(shù)據(jù)的解決方案,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2026-02-02
C#使用SemaphoreSlim實(shí)現(xiàn)并發(fā)控制與限流策略的實(shí)戰(zhàn)指南
在現(xiàn)代應(yīng)用中(如爬蟲、并發(fā)請(qǐng)求、數(shù)據(jù)庫連接池、異步任務(wù)處理),我們常常需要限制同時(shí)執(zhí)行的任務(wù)數(shù)量,以避免過載或資源競爭,在 C# 中,最簡潔高效的解決方案之一就是SemaphoreSlim,本文就給大家介紹了C#使用SemaphoreSlim實(shí)現(xiàn)并發(fā)控制與限流策略的實(shí)戰(zhàn)指南2025-11-11

