最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#調(diào)用C++ DLL bool返回值始終為true的問(wèn)題

 更新時(shí)間:2022年11月08日 09:22:48   作者:cchangcs  
這篇文章主要介紹了C#調(diào)用C++ DLL bool返回值始終為true的問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

C#調(diào)用C++ DLL bool返回值始終為true

問(wèn)題描述

在C#項(xiàng)目中,調(diào)用C++ DLL中方法時(shí),bool 返回值始終返回true。

問(wèn)題原因

C將布爾定義為4字節(jié)int,C++將其定義為1字節(jié)。C#團(tuán)隊(duì)決定在PInvoke期間使用4字節(jié)bool作為默認(rèn)值,因?yàn)榇蠖鄶?shù)系統(tǒng)API函數(shù)使用4字節(jié)值作為bool。如果要更改此行為,必須通過(guò)封送處理來(lái)完成,并指定要使用1字節(jié)值。

解決方案

方案一

采用int 返回值替代bool返回值,如返回1代表true,返回0代表false。

方案二

通過(guò)[return:MarshalAs(UnmanagedType.I1)]  指定返回值為1字節(jié)值。

[DllImport("Whisper.dll", EntryPoint="Exist", CallingConvention=CallingConvention.Cdecl)]  
[return:MarshalAs(UnmanagedType.I1)]  
public static extern bool Exist([MarshalAs(UnmanagedType.LPStr)] string name);

C#調(diào)用C++的DLL返回值為bool時(shí),值混亂

現(xiàn)象:C++ 導(dǎo)出函數(shù)的返回值為 false,C# 調(diào)用該函數(shù)獲取的返回值卻為 true 。

原因:C++ 導(dǎo)出函數(shù)返回 false 時(shí),采取的方式是:

將 C# 定義的用來(lái)接收返回值的 bool 所指的地址開(kāi)始 4 個(gè)字節(jié)設(shè)為 0x01000000(見(jiàn)圖1)。

注:用 C++ 代碼調(diào)用該導(dǎo)出函數(shù)時(shí),采取的方式是:將 C++ 定義的用來(lái)接收返回值的 bool 所指的地址開(kāi)始 1 個(gè) 字節(jié)設(shè)為 0x00;

為什么用 C# 代碼調(diào)用該導(dǎo)出函數(shù)時(shí),采取的方式不是:將 C# 定義的用來(lái)接收返回值的 bool 所指的地址開(kāi)始 1個(gè) 字節(jié) 設(shè)為 0x00 ? —— 編譯器問(wèn)題(BUG?)。

圖 1

解決方案

在 C++ 導(dǎo)出函數(shù)中使用 BOOL 代替 bool 。

注:由于C++ 中的 BOOL 占4個(gè)字節(jié),

C++ 導(dǎo)出函數(shù)返回 false 時(shí),采取的方式是:

將 C# 定義的用來(lái)接收返回值的 bool 所指的地址開(kāi)始 4 個(gè)字節(jié)設(shè)為0x00000000(見(jiàn)圖2),因此不存在上述問(wèn)題。

圖 2

圖3

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#數(shù)據(jù)結(jié)構(gòu)之順序表(SeqList)實(shí)例詳解

    C#數(shù)據(jù)結(jié)構(gòu)之順序表(SeqList)實(shí)例詳解

    這篇文章主要介紹了C#數(shù)據(jù)結(jié)構(gòu)之順序表(SeqList)實(shí)現(xiàn)方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了順序表的定義、原理與具體實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-11-11
  • 深入理解C#委托delegate的使用

    深入理解C#委托delegate的使用

    本文主要介紹了C#委托delegate的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • C#動(dòng)態(tài)加載程序集的全攻略

    C#動(dòng)態(tài)加載程序集的全攻略

    在 C# 中,動(dòng)態(tài)加載程序集是一種常見(jiàn)的需求,特別是在需要模塊化、插件化或運(yùn)行時(shí)擴(kuò)展功能的場(chǎng)景中,以下是如何實(shí)現(xiàn) C# 代碼依賴的動(dòng)態(tài)加載的詳細(xì)說(shuō)明,結(jié)合了知識(shí)庫(kù)中的關(guān)鍵信息和實(shí)際應(yīng)用技巧,需要的朋友可以參考下
    2025-08-08
  • C#之App.Config文件操作的實(shí)現(xiàn)

    C#之App.Config文件操作的實(shí)現(xiàn)

    AppConfigHelper提供了一種方便的方式來(lái)讀取、添加、修改和刪除應(yīng)用程序配置文件中的配置項(xiàng),本文主要介紹了C#之App.Config文件操作的實(shí)現(xiàn),感興趣的可以了解一下
    2026-01-01
  • VS2015 C#生成dll文件的方法(32/64)

    VS2015 C#生成dll文件的方法(32/64)

    這篇文章主要介紹了VS2015 C#生成dll文件的方法(32/64),需要的朋友可以參考下
    2016-12-12
  • C#引用類型轉(zhuǎn)換的常見(jiàn)方式總結(jié)

    C#引用類型轉(zhuǎn)換的常見(jiàn)方式總結(jié)

    這篇文章主要介紹了C#引用類型轉(zhuǎn)換的常見(jiàn)方式,包括子類轉(zhuǎn)換成父類,父類轉(zhuǎn)換成子類,以及不是子父級(jí)關(guān)系類之間的轉(zhuǎn)換,需要的朋友可以參考下
    2014-09-09
  • C#實(shí)現(xiàn)基于ffmpeg加虹軟的人臉識(shí)別的示例

    C#實(shí)現(xiàn)基于ffmpeg加虹軟的人臉識(shí)別的示例

    本篇文章主要介紹了C#實(shí)現(xiàn)基于ffmpeg加虹軟的人臉識(shí)別的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • 如何讓C#、VB.NET實(shí)現(xiàn)復(fù)雜的二進(jìn)制操作

    如何讓C#、VB.NET實(shí)現(xiàn)復(fù)雜的二進(jìn)制操作

    VB.NET和C#屬于高級(jí)語(yǔ)言,對(duì)二進(jìn)制位操作的支持不是很好,比如沒(méi)有了移位運(yùn)算等,用的時(shí)候確實(shí)很不方便,所以在閑暇之余我重新封裝了一個(gè)用于C#、VB.NET的位操作類庫(kù),通過(guò)該類庫(kù)可以實(shí)現(xiàn)數(shù)據(jù)移位、循環(huán)移位、轉(zhuǎn)換為二進(jìn)制、將二進(jìn)制轉(zhuǎn)換為數(shù)據(jù)等
    2013-07-07
  • C#中Timer實(shí)現(xiàn)Tick使用精度的問(wèn)題

    C#中Timer實(shí)現(xiàn)Tick使用精度的問(wèn)題

    這篇文章主要介紹了C#中Timer實(shí)現(xiàn)Tick使用精度的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 基于c# Task自己動(dòng)手寫(xiě)個(gè)異步IO函數(shù)

    基于c# Task自己動(dòng)手寫(xiě)個(gè)異步IO函數(shù)

    這篇文章主要介紹了如何基于c# Task自己動(dòng)手寫(xiě)個(gè)異步IO函數(shù),幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-03-03

最新評(píng)論

治县。| 如皋市| 新民市| 洮南市| 精河县| 林甸县| 福贡县| 长治县| 乐清市| 江油市| 芦山县| 中宁县| 和静县| 永定县| 龙陵县| 陇南市| 万宁市| 老河口市| 昌乐县| 通道| 永泰县| 从化市| 新密市| 青阳县| 文山县| 濮阳市| 宝应县| 和顺县| 琼中| 万安县| 新余市| 合作市| 瑞金市| 综艺| 宣城市| 兴业县| 南部县| 冀州市| 广昌县| 霍林郭勒市| 永善县|