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

C#調用C++使用C++/CLI的實現

 更新時間:2024年03月27日 11:21:11   作者:咸魚翻身?  
在C#開發(fā)過程中,我們可能會遇到需要調用Windows API 或是第三方庫的場景,本文主要介紹了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ù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 不用IDE寫C#的Hello World的方法

    不用IDE寫C#的Hello World的方法

    這篇文章主要介紹了不用IDE寫C#的Hello World的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2015-10-10
  • C#編程實現動態(tài)改變配置文件信息的方法

    C#編程實現動態(tài)改變配置文件信息的方法

    這篇文章主要介紹了C#編程實現動態(tài)改變配置文件信息的方法,涉及C#針對xml格式文件的相關操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2016-06-06
  • C#實現簡易計算器小功能

    C#實現簡易計算器小功能

    這篇文章主要為大家詳細介紹了C#實現簡易計算器小功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C#面向對象編程中依賴反轉原則的示例詳解

    C#面向對象編程中依賴反轉原則的示例詳解

    在面向對象編程中,SOLID?是五個設計原則的首字母縮寫,旨在使軟件設計更易于理解、靈活和可維護。本文將通過實例詳細講講C#面向對象編程中依賴反轉原則,需要的可以參考一下
    2022-07-07
  • WPF TextBox和PasswordBox添加水印

    WPF TextBox和PasswordBox添加水印

    這篇文章主要為大家詳細介紹了WPF TextBox和PasswordBox添加水印的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • C#實現導出數據庫數據到Excel文件

    C#實現導出數據庫數據到Excel文件

    利用C#編程語言的強大特性和豐富的.NET庫支持,開發(fā)人員可以高效地完成從數據庫到Excel文件的數據遷移,下面就跟隨小編一起學習一下具體操作吧
    2024-12-12
  • c# asp .net 動態(tài)創(chuàng)建sql數據庫表的方法

    c# asp .net 動態(tài)創(chuàng)建sql數據庫表的方法

    c# asp .net 動態(tài)創(chuàng)建sql數據庫表的方法,需要的朋友可以參考一下
    2013-04-04
  • C# 通過反射獲取類型的字段值及給字段賦值的操作

    C# 通過反射獲取類型的字段值及給字段賦值的操作

    這篇文章主要介紹了C# 通過反射獲取類型的字段值及給字段賦值的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Unity?UGUI的EventSystem事件系統(tǒng)組件介紹使用

    Unity?UGUI的EventSystem事件系統(tǒng)組件介紹使用

    這篇文章主要為大家介紹了Unity?UGUI的EventSystem事件系統(tǒng)組件介紹使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • C#實現奇偶排序的示例代碼

    C#實現奇偶排序的示例代碼

    奇偶排序是一種簡單的排序算法,該算法通過比較并交換相鄰的元素來完成排序,本文主要介紹了C#實現奇偶排序的示例代碼,具有一定的參考價值,感興趣的可以了解一下
    2023-11-11

最新評論