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

c#調用c語言dll需要注意的地方

 更新時間:2021年03月22日 09:09:03   作者:weareu  
這篇文章主要介紹了c#調用c語言dll需要注意的地方,幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下

一、將C#工程和C的dll工程放在同一個解決方案下,這樣就可以實現(xiàn)聯(lián)動調試,直接從C#中進入C的dll函數(shù)里。注意:每次更改dll中的代碼后都必須重新生成dll。另,C#與C中有幾種變量類型不對應,注意聲明時的區(qū)分。

語言 C# C
類型 long long long/__int64
byte/Byte unsigned char
char

wchar_t

UInt32 size_t

二、dll工程中頭文件加入以下代碼:

// 此代碼為了方便頭文件在dll工程和調用該dll的工程中重復利用
// 為了方便其他使用者,建議dll開發(fā)者定義TESTDLL宏
#ifdef  TESTDLL
#define DLLAPI _declspec(dllexport)
#else
#define DLLAPI _declspec(dllimport)
#endif
 
// 此代碼為了保證使用C編譯器編譯代碼,防止函數(shù)名出現(xiàn)其他后綴
 
#ifdef __cpluscplus
extern "C" {
#endif
 
// 插入所需導出的代碼,例如:
int DLLAPI testdll();
 
#ifdef __cpluscplus
}
#endif
 

三、dll工程中源文件加入以下代碼(注意:該代碼應該出現(xiàn)于上述頭文件之前):

#define TESTDLL

四、C#工程中,需要調用dll函數(shù)的文件中加入以下代碼:

// 導入testdll函數(shù)
[DllImport(@"../../../Debug/testdll.dll", EntryPoint = "testdll", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)]
 
extern static int testdll();

第一個參數(shù)是dll文件所在地址,由于該dll與C#工程在同一個解決方案中因此可以寫成上述形式;

EntryPoint, 函數(shù)的名稱,可以不寫,下面一行有聲明;

SetLastError, 指示方法是否保留 Win32"上一錯誤";

CharSet, dll中字符串的表達方式,通常使用Ansi或者Unicode;該設置會將C#中的字符自動轉換為設置的方式,例如上述設置會將工程中的字符串轉換為Ansi字符;

ExactSpelling,指示 EntryPoint 是否必須與指示的入口點的拼寫完全匹配;

PreserveSig,指示方法的簽名應當被保留還是被轉換;

CallingConvention,調用慣例,通常C語言使用Cdecl方式CallingConvention,如果該值與dll中的調用方式不一致,通常會造成堆棧不平衡,導致PInvoke報錯,該選項有如下幾個值:

Cdecl 調用方清理堆棧。這使您能夠調用具有 varargs 的函數(shù)(如 Printf),使之可用于接受可變數(shù)目的參數(shù)的方法。 
FastCall 不支持此調用約定。
StdCall 被調用方清理堆棧。這是使用平臺 invoke 調用非托管函數(shù)的默認約定。 
ThisCall  第一個參數(shù)是 this 指針,它存儲在寄存器 ECX 中。其他參數(shù)被推送到堆棧上。此調用約定用于對從非托管 DLL 導出的類調用方法。 
Winapi  此成員實際上不是調用約定,而是使用了默認平臺調用約定。例如,在 Windows 上默認為 StdCall,在 Windows CE.NET 上默認為 Cdecl。 

以上就是c#調用c dll需要注意的地方的詳細內容,更多關于c#調用c dll的資料請關注腳本之家其它相關文章!

相關文章

  • .net2.0+ Winform項目實現(xiàn)彈出容器層

    .net2.0+ Winform項目實現(xiàn)彈出容器層

    在實際工作中,如果能像菜單一樣彈出自定義內容,會方便很多,比如查詢時,比如下拉列表顯示多列信息時,比如在填寫某個信息需要查看一些信息樹時。這個時候自定義彈出界面就顯的非常重要了
    2015-08-08
  • C#?wpf?Bitmap轉換成WriteableBitmap的方法

    C#?wpf?Bitmap轉換成WriteableBitmap的方法

    本文主要介紹了C#?wpf?Bitmap轉換成WriteableBitmap的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • Unity工具類ScrollView實現(xiàn)拖拽滑動翻頁

    Unity工具類ScrollView實現(xiàn)拖拽滑動翻頁

    這篇文章主要為大家詳細介紹了Unity工具類ScrollView實現(xiàn)拖拽滑動翻頁,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • 深入理解C#中new、override、virtual關鍵字的區(qū)別

    深入理解C#中new、override、virtual關鍵字的區(qū)別

    下面小編就為大家?guī)硪黄钊肜斫釩#中new、override、virtual關鍵字的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • C#?WPF編程之Application類的使用詳解

    C#?WPF編程之Application類的使用詳解

    每個運行中的WPF應用程序都由System.Windows.Application類的一個實例來表示,該類跟蹤在應用程序中打開的所有窗口,決定何時關閉應用程序,下面就跟隨小編一起來深入了解下Application類的使用吧
    2024-04-04
  • Repeater控件綁定的三種方式

    Repeater控件綁定的三種方式

    Repeater 控件用于顯示重復的信息,這些信息被綁定在該控件上。一般項目中經常出現(xiàn)三種使用方式
    2013-05-05
  • 分享WCF聊天程序--WCFChat實現(xiàn)代碼

    分享WCF聊天程序--WCFChat實現(xiàn)代碼

    無意中在一個國外的站點下到了一個利用WCF實現(xiàn)聊天的程序,作者是:Nikola Paljetak。研究了一下,自己做了測試和部分修改,感覺還不錯,分享給大家
    2015-11-11
  • C#實現(xiàn)微信紅包功能

    C#實現(xiàn)微信紅包功能

    這篇文章主要介紹了C#實現(xiàn)微信紅包功能,使用正態(tài)分布計算紅包金額,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • C#實現(xiàn)HTTP下載文件的方法

    C#實現(xiàn)HTTP下載文件的方法

    這篇文章主要介紹了C#實現(xiàn)HTTP下載文件的方法,包括了HTTP通信的創(chuàng)建、本地文件的寫入等,非常具有實用價值,需要的朋友可以參考下
    2014-11-11
  • C#實現(xiàn)HSL顏色值轉換為RGB的方法

    C#實現(xiàn)HSL顏色值轉換為RGB的方法

    這篇文章主要介紹了C#實現(xiàn)HSL顏色值轉換為RGB的方法,涉及C#數(shù)值判定與轉換的相關技巧,需要的朋友可以參考下
    2015-06-06

最新評論

郁南县| 舞阳县| 宿迁市| 水富县| 黔东| 兴隆县| 太仆寺旗| 塔河县| 江达县| 萍乡市| 上虞市| 刚察县| 登封市| 雅江县| 逊克县| 宣汉县| 霍邱县| 竹北市| 文水县| 龙江县| 津市市| 枣阳市| 桑日县| 潼关县| 甘南县| 金乡县| 内乡县| 民权县| 浦城县| 泰和县| 磐安县| 新巴尔虎右旗| 噶尔县| 贵南县| 瑞昌市| 施秉县| 舞阳县| 兴隆县| 山阳县| 额济纳旗| 邢台县|