欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#調(diào)用C++使用C++/CLI的實(shí)現(xiàn)

 更新時(shí)間:2024年03月27日 11:21:11   作者:咸魚(yú)翻身?  
在C#開(kāi)發(fā)過(guò)程中,我們可能會(huì)遇到需要調(diào)用Windows API 或是第三方庫(kù)的場(chǎng)景,本文主要介紹了C#調(diào)用C++使用C++/CLI的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下

簡(jiǎn)介

C++/CLI(C++ Common Language Infrastructure)是一種允許在 .NET 平臺(tái)上創(chuàng)建托管代碼(managed code)和非托管代碼(unmanaged code)之間互操作的語(yǔ)言。其原理可以概括如下:

  • 編譯器支持: C++/CLI 編譯器能夠編譯同時(shí)包含托管和非托管代碼的源文件。這使得在同一個(gè)項(xiàng)目中可以混合使用 C++ 和 C# 或其他 .NET 語(yǔ)言。

  • 托管和非托管代碼的橋梁: C++/CLI 提供了語(yǔ)法和關(guān)鍵字,允許你在同一個(gè)文件中編寫(xiě)托管代碼和非托管代碼。這些代碼可以相互調(diào)用,使得 C# 和 C++ 之間的交互變得簡(jiǎn)單。

  • CLR(Common Language Runtime)集成: C++/CLI 代碼在編譯時(shí)會(huì)生成對(duì) CLR 的調(diào)用,因此它可以利用 CLR 提供的各種功能,例如垃圾回收、類(lèi)型安全性和異常處理等。

  • 托管代碼的封裝: 在 C++/CLI 中,你可以將非托管的 C++ 代碼封裝在托管的類(lèi)中,通過(guò)公共接口暴露給其他 .NET 語(yǔ)言。這樣,C++ 的功能可以被其他 .NET 語(yǔ)言輕松調(diào)用和使用。

  • 數(shù)據(jù)類(lèi)型轉(zhuǎn)換: C++/CLI 提供了一組轉(zhuǎn)換操作符和工具,用于在托管代碼和非托管代碼之間進(jìn)行數(shù)據(jù)類(lèi)型的轉(zhuǎn)換。這樣,你可以在 C++/CLI 中輕松處理 C# 中的數(shù)據(jù)類(lèi)型,反之亦然。

  • 資源管理: 在 C++/CLI 中,你可以使用托管的資源管理功能(如 gcnew 創(chuàng)建托管對(duì)象和 delete 銷(xiāo)毀對(duì)象),同時(shí)也可以手動(dòng)管理非托管資源(如使用析構(gòu)函數(shù)釋放內(nèi)存)。

新建解決方案->CSharpCPlusSolution

新建動(dòng)態(tài)鏈接庫(kù)(DLL)->CPlusNative

新建類(lèi)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類(lèi)庫(kù)(DLL)->CPlusWrapper

添加包含目錄 NativeCalculate.h

添加 CPlusNative.lib附加庫(kù)目錄

添加附加庫(kù)依賴(lài)項(xiàng) CPlusNative.lib

創(chuàng)建包裝類(lèi)NativeCPlusWrapper

上述配置完畢后,CPlusWrapper項(xiàng)目創(chuàng)建包裝類(lèi)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);
        }
    }
}

常見(jiàn)錯(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)文章

最新評(píng)論