国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C#調(diào)用C++封裝的SDK庫(dll動(dòng)態(tài)庫)——下

這篇具有很好參考價(jià)值的文章主要介紹了C#調(diào)用C++封裝的SDK庫(dll動(dòng)態(tài)庫)——下。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

C#調(diào)用C++封裝的SDK庫(dll動(dòng)態(tài)庫)——下

一、說明

上一篇我們相當(dāng)于封裝的是C語言風(fēng)格的動(dòng)態(tài)dll庫,供C#來調(diào)用的。

C#調(diào)用C++封裝的SDK庫(dll動(dòng)態(tài)庫)——上

如果我們要封裝的是下面的類呢?我們?cè)撛趺崔k?大家先思考下。


class Calculation
{
public:
    Calculation();

    int add(int a, int b);
 
    int subtract(int a, int b);
 
    int multiply(int a, int b);
 
    int divide(int a, int b);
    
};
 

C#調(diào)用C++封裝的SDK庫(dll動(dòng)態(tài)庫)——下

?二、思路

不知道大家還記得設(shè)計(jì)模式中的單例模式嗎?

我們可以采用類似的處理方式,通過創(chuàng)建一個(gè)實(shí)例函數(shù)指針的方式,來通過這個(gè)實(shí)例作為一個(gè)參數(shù)來調(diào)用累的成員函數(shù)。

如下所示:

Calculation* getCalculation();
int add(Calculation* pCalculation, int a, int b);

三、創(chuàng)建動(dòng)態(tài)DLL

1、我們創(chuàng)建一個(gè)DLL的動(dòng)態(tài)庫工程,命名CalculationDLL。

C#調(diào)用C++封裝的SDK庫(dll動(dòng)態(tài)庫)——下

C#調(diào)用C++封裝的SDK庫(dll動(dòng)態(tài)庫)——下

C#調(diào)用C++封裝的SDK庫(dll動(dòng)態(tài)庫)——下

在項(xiàng)目中添加一個(gè)Calculation類。

C#調(diào)用C++封裝的SDK庫(dll動(dòng)態(tài)庫)——下

?Calculation.h頭文件添加如下代碼:

#pragma once
 
#ifdef DLLCALCULATION_EXPORTS
#define DLLCALCULATION_API __declspec(dllexport)
#else
#define DLLCALCULATION_API __declspec(dllimport)
#endif // DLLCALCULATION_EXPORTS
 
 
class Calculation
{
public:
    Calculation();

    int add(int a, int b);
 
    int subtract(int a, int b);
 
    int multiply(int a, int b);
 
    int divide(int a, int b);
    
};

EXTERN_C DLLCALCULATION_API Calculation* getCalculation();

EXTERN_C DLLCALCULATION_API void destructorCalculation(Calculation* pCalculation);
 
EXTERN_C DLLCALCULATION_API int add(Calculation* pCalculation, int a, int b);
 
EXTERN_C DLLCALCULATION_API int subtract(Calculation* pCalculation, int a, int b);
 
EXTERN_C DLLCALCULATION_API int multiply(Calculation* pCalculation, int a, int b);
 
EXTERN_C DLLCALCULATION_API int divide(Calculation* pCalculation, int a, int b);

Calculation.cpp文件添加如下代碼:

#include "pch.h"
#include "Calculation.h"
 
Calculation::Calculation()
{
}

int Calculation::add(int a, int b) 
{
	return (a + b);
}
 
int Calculation::subtract(int a, int b)
{
	return (a - b);
}

int Calculation::multiply(int a, int b)
{
	return (a * b);
}
 
int Calculation::divide(int a, int b)
{
	return (a / b);
}

DLLCALCULATION_API Calculation* getCalculation()
{
    return new Calculation();
}

DLLCALCULATION_API void destructorCalculation(Calculation* pCalculation)
{
    if( pCalculation )
    {
        delete pCalculation;
        pCalculation = NULL;
    }
}
 
DLLCALCULATION_API int add(Calculation* pCalculation, int a, int b)
{
    return pCalculation->add(a,b);
}
 
DLLCALCULATION_API int subtract(Calculation* pCalculation, int a, int b)
{
    return pCalculation->subtract(a,b);
}
 
DLLCALCULATION_API int multiply(Calculation* pCalculation, int a, int b)
{
    return pCalculation->multiply(a,b);
}
 
DLLCALCULATION_API int divide(Calculation* pCalculation, int a, int b)
{
    return pCalculation->divide(a,b);
}

在屬性頁,C/C++->預(yù)處理器->預(yù)處理器定義,添加DLLCALCULATION_EXPORTS

C#調(diào)用C++封裝的SDK庫(dll動(dòng)態(tài)庫)——下

?四、創(chuàng)建C#控制臺(tái)調(diào)用項(xiàng)目

創(chuàng)建一個(gè)C#的控制臺(tái)項(xiàng)目:

C#調(diào)用C++封裝的SDK庫(dll動(dòng)態(tài)庫)——下

C#調(diào)用C++封裝的SDK庫(dll動(dòng)態(tài)庫)——下

C#調(diào)用C++封裝的SDK庫(dll動(dòng)態(tài)庫)——下

?在Program.cs中輸入下面的調(diào)用代碼:

// See https://aka.ms/new-console-template for more information
 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
using System.Runtime.InteropServices;
 
namespace ConsoleApp1
{
    class Program
    {

[DllImport("C:\\My_vs2022Project\\CalculationDLL\\x64\\Release\\CalculationDLL.dll", CallingConvention = CallingConvention.Cdecl)]
        public extern static IntPtr getCalculation();
                [DllImport("C:\\My_vs2022Project\\CalculationDLL\\x64\\Release\\CalculationDLL.dll", CallingConvention = CallingConvention.Cdecl)]
        public extern static void destructorCalculation(IntPtr pCalculation);
        [DllImport("C:\\My_vs2022Project\\CalculationDLL\\x64\\Release\\CalculationDLL.dll", CallingConvention = CallingConvention.Cdecl)]
        public extern static int add(IntPtr pCalculation, int a, int b);
                [DllImport("C:\\My_vs2022Project\\CalculationDLL\\x64\\Release\\CalculationDLL.dll", CallingConvention = CallingConvention.Cdecl)]
        public extern static int subtract(IntPtr pCalculation, int a, int b);
 
        [DllImport("C:\\My_vs2022Project\\CalculationDLL\\x64\\Release\\CalculationDLL.dll", CallingConvention = CallingConvention.Cdecl)]
        public extern static int multiply(IntPtr pCalculation, int a, int b);
 
        [DllImport("C:\\My_vs2022Project\\CalculationDLL\\x64\\Release\\CalculationDLL.dll", CallingConvention = CallingConvention.Cdecl)]
        public extern static int divide(IntPtr pCalculation, int a, int b);
 
        static void Main(string[] args)
        {
            IntPtr pCalculation = getCalculation();
            
            int a = 10;
            int b = 2;
            Console.WriteLine("a+b= " + add(pCalculation, a, b));
            Console.WriteLine("a-b= " + subtract(pCalculation, a, b));
            Console.WriteLine("a*b= " + multiply(pCalculation, a, b));
            Console.WriteLine("a/b= " + divide(pCalculation, a, b));
            
            destructorCalculation(pCalculation);

            Console.WriteLine("calc end.");
            Console.ReadKey();
        }
    }
}

好了,你可以運(yùn)行看看效果了。

上一篇:C#調(diào)用C++封裝的SDK庫(dll動(dòng)態(tài)庫)——上

本文原創(chuàng)作者:馮一川(ifeng12358@163.com),未經(jīng)作者授權(quán)同意,請(qǐng)勿轉(zhuǎn)載。文章來源地址http://www.zghlxwxcb.cn/news/detail-424898.html

到了這里,關(guān)于C#調(diào)用C++封裝的SDK庫(dll動(dòng)態(tài)庫)——下的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • c++動(dòng)態(tài)調(diào)用dll

    在C++中動(dòng)態(tài)調(diào)用DLL(動(dòng)態(tài)鏈接庫)可以使用Windows API函數(shù)。以下是一個(gè)簡單的示例,演示如何動(dòng)態(tài)加載和調(diào)用DLL中的函數(shù): 在上面的示例中,我們首先使用LoadLibrary函數(shù)加載DLL。然后,使用GetProcAddress函數(shù)獲取要調(diào)用的函數(shù)的指針。在本例中,我們假設(shè)要調(diào)用的函數(shù)名為\\\"MyFu

    2024年01月24日
    瀏覽(22)
  • C++調(diào)用C# dll成功示例

    C++調(diào)用C# dll成功示例

    一.準(zhǔn)備C# dll類庫 。生成CSLib.dll ?二、寫C++應(yīng)用調(diào)用 ?1)需要把dll復(fù)制到運(yùn)行目錄下。(不然會(huì)提示找不到dll System.IO.FileNotFoundException:“未能加載文件或程序集“CSLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”或它的某一個(gè)依賴項(xiàng)。系統(tǒng)找不到指定的文件) 2)設(shè)置\\\"公共語言運(yùn)

    2024年02月14日
    瀏覽(23)
  • C#調(diào)用C++ dll異常排查

    C#調(diào)用C++ dll異常排查

    最近在做的一款程序,長時(shí)間運(yùn)行總會(huì)出現(xiàn)莫名的問題。有時(shí)是自動(dòng)關(guān)閉,有時(shí)程序報(bào)錯(cuò),有時(shí)調(diào)用的dll異常…… 由于開始與C++組合作時(shí),使用其提供的dll出現(xiàn)過數(shù)據(jù)讀寫時(shí)異常(內(nèi)存操作異常),于是懷疑他們提供的dll有內(nèi)存泄漏。于是想通過日志或其它方法來確認(rèn)這個(gè)猜

    2024年01月21日
    瀏覽(28)
  • C#調(diào)用C++類,托管C++方式實(shí)現(xiàn)(創(chuàng)建C++ CLR dll項(xiàng)目)

    C#調(diào)用C++類,托管C++方式實(shí)現(xiàn)(創(chuàng)建C++ CLR dll項(xiàng)目)

    ????????由于C#編寫的是托管代碼,編譯生成微軟中間語言,而C++代碼則編譯生成本地機(jī)器碼(這種C++也有叫做本地C++或者非托管C++,VC6.0就是用于開發(fā)非托管C++代碼的平臺(tái)),這兩種語言進(jìn)行混合編程就存在一定困難。比較常用的方法是使用DllImport的方法,這種方法在網(wǎng)

    2024年02月07日
    瀏覽(14)
  • c#調(diào)用matlab生成的COM DLL,Matlab GUI程序封裝成exe文件并在不安裝Matlab的電腦上運(yùn)行

    c#調(diào)用matlab生成的COM DLL,Matlab GUI程序封裝成exe文件并在不安裝Matlab的電腦上運(yùn)行

    最近根據(jù)需求用Matlab寫了一個(gè)簡單的軟件,但需要安裝到其他電腦上運(yùn)行,倒騰了很久最終成功在其他電腦上運(yùn)行,現(xiàn)將方法共享給大家。 安裝方法: ①程序封裝 首先用Matlab寫完程序并封裝好(我用的是Matlab2018b,封裝的時(shí)候就用matlab自帶的APP封裝程序就好[就是黑框框那個(gè)

    2024年01月22日
    瀏覽(31)
  • [Python] 如何通過ctypes庫來調(diào)用C++ 動(dòng)態(tài)庫 DLL?

    [Python] 如何通過ctypes庫來調(diào)用C++ 動(dòng)態(tài)庫 DLL?

    ctypes是Python的一個(gè)外部庫,它提供了一種靈活的方式來調(diào)用C語言的動(dòng)態(tài)鏈接庫(DLL)或共享庫(SO)。通過ctypes,我們可以在Python中直接調(diào)用 C語言編寫的函數(shù)和變量 ,從而實(shí)現(xiàn)跨語言的互操作。 ctypes?它提供了與 C 兼容的數(shù)據(jù)類型,并允許調(diào)用 DLL 或共享庫中的函數(shù)。可使用該模

    2024年01月19日
    瀏覽(22)
  • C#調(diào)用C++動(dòng)態(tài)庫

    C#調(diào)用C++動(dòng)態(tài)庫

    在C#開發(fā)過程中,我們可能會(huì)遇到需要調(diào)用Windows API 或是第三方庫的場景,然而有時(shí)候這些庫是由C++編寫的,并不能直接應(yīng)用在C#的程序中,這為開發(fā)帶來許多阻力。本文介紹兩種使用C#調(diào)用C++動(dòng)態(tài)庫的方式,以及在這個(gè)過程中可能遇到的問題,看完之后會(huì)對(duì)你的困境有所幫助

    2024年02月16日
    瀏覽(15)
  • VS2022環(huán)境下C++ DLL動(dòng)態(tài)鏈接庫的編寫和調(diào)用

    VS2022環(huán)境下C++ DLL動(dòng)態(tài)鏈接庫的編寫和調(diào)用

    1、新建動(dòng)態(tài)鏈接庫項(xiàng)目 2、新建類 3、宏定義 4、使用宏定義修飾類 調(diào)用DLL動(dòng)態(tài)鏈接庫大致有兩種方法: 一種是“隱式調(diào)用”,需要.h頭文件、.lib符號(hào)文件、.dll動(dòng)態(tài)庫文件; 一種是“顯示調(diào)用”,需要.dll動(dòng)態(tài)庫文件; 此處介紹第一種調(diào)用方式。 1、創(chuàng)建項(xiàng)目 2、項(xiàng)目屬性

    2024年02月14日
    瀏覽(28)
  • stable-diffusion.cpp 一個(gè)文件解決stable diffusion所有環(huán)境,不需要python,stable-diffusion.dll動(dòng)態(tài)庫C#調(diào)用Demo

    stable-diffusion.cpp 一個(gè)文件解決stable diffusion所有環(huán)境,不需要python,stable-diffusion.dll動(dòng)態(tài)庫C#調(diào)用Demo

    stable-diffusion.cpp 一個(gè)文件解決stable-diffusion所有環(huán)境,不需要python,stable-diffusion.dll動(dòng)態(tài)庫C#調(diào)用Demo 目錄 介紹 效果 Text To Image Image To Image Upscale 項(xiàng)目 代碼 Native.cs SDHelper.cs MainForm.cs 下載? stable-diffusion.cpp 地址:https://github.com/leejet/stable-diffusion.cpp StableDiffusionSharp 地址:https://

    2024年04月14日
    瀏覽(21)
  • C#生成dll給c++調(diào)用 方法二COM方式 vs2022 NO Make Assembly COM-Visible選錯(cuò)了 不需要clr

    C#生成dll給c++調(diào)用 方法二COM方式 vs2022 NO Make Assembly COM-Visible選錯(cuò)了 不需要clr

    有些C++項(xiàng)目中也用了C語言.c,用方法一就無法使用【不能使用 /clr 選項(xiàng)編譯 C 文件】。就用方法2。 ?參考:??https://www.5axxw.com/questions/content/2ozion ?1.C#?生成dll ?? ?編譯正常,C#?dll就完成了。 2.C++調(diào)用示例

    2024年02月14日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包