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

C#調(diào)用非托管動(dòng)態(tài)庫(kù)中的函數(shù)方法

 更新時(shí)間:2015年02月18日 14:55:18   投稿:junjie  
這篇文章主要介紹了C#調(diào)用非托管動(dòng)態(tài)庫(kù)中的函數(shù)方法,本文講解創(chuàng)建一個(gè)非托管動(dòng)態(tài)庫(kù),然后在C#中調(diào)用它,需要的朋友可以參考下

C#如何調(diào)用一個(gè)非托管動(dòng)態(tài)庫(kù)中的函數(shù)呢,比如用VC6寫的動(dòng)態(tài)庫(kù),總之C#調(diào)用動(dòng)態(tài)庫(kù)的過(guò)程是比Java調(diào)用DLL動(dòng)態(tài)庫(kù)方便快捷多了,下面舉例說(shuō)明這個(gè)過(guò)程。

1、創(chuàng)建一個(gè)非托管動(dòng)態(tài)庫(kù)

代碼如下:

復(fù)制代碼 代碼如下:

   //這一句是聲明動(dòng)態(tài)庫(kù)輸出一個(gè)可供外不調(diào)用的函數(shù)原型. 
   extern   "C"  __declspec(dllexport)  int  add( int ,  int ); 

   int  add( int  a, int  b)  
   { 
        //實(shí)現(xiàn)這個(gè)函數(shù)returna+b; 
   }


注意上面代碼,一定要加上 extern"C" ,不能生成的動(dòng)態(tài)庫(kù)中的導(dǎo)出函數(shù)名就不會(huì)是add,而是像 ?add@@YAHHH@Z 樣子,后面只是通過(guò)函數(shù)名 add 來(lái)定位函數(shù)入口就會(huì)出問(wèn)題。

保存成C或者CPP文件都可以,接下來(lái)就用命令 cl (這個(gè)命令VC6提供) 來(lái)編譯生成一個(gè)動(dòng)態(tài)庫(kù),命令如下:

復(fù)制代碼 代碼如下:

C:\>cl /LD MyLib.cpp
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.

MyLib.cpp
Microsoft (R) Incremental Linker Version 6.00.8447
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

/out:MyLib.dll
/dll
/implib:MyLib.lib
MyLib.obj
Creating library MyLib.lib and object MyLib.exp


可以看到在C盤根目錄下生成了你要的動(dòng)態(tài)庫(kù) MyLib.Dll ,還伴隨著生成了MyLib.lib、MyLib.obj、MyLib.exp文件,上面命令cl的參數(shù)/LD就是生成動(dòng)態(tài)庫(kù)文件

2、編寫C#程序調(diào)用動(dòng)態(tài)庫(kù)

復(fù)制代碼 代碼如下:

   using  System; 
   using  System.Runtime.InteropServices; //這是用到DllImport時(shí)候要引入的包 
   public   class  InvokeDll{ 

       [DllImport( "MyLib.dll" , CharSet=CharSet.Auto)] 
       staticexternint add( int  a, int  b); //聲明外部的標(biāo)準(zhǔn)動(dòng)態(tài)庫(kù), 跟Win32API是一樣. 

        public   static   void  Main() 
       { 
         Console.WriteLine(add(10,30)); 
       } 
   }


保存為InvokeDll.cs文件, 與MyLib.dll置于同一目錄, 編譯該文件.
復(fù)制代碼 代碼如下:

C:\>csc InvokeDll.cs
Microsoft (R) Visual C# .NET 編譯器版本 7.10.3052.4
用于 Microsoft (R) .NET Framework 版本 1.1.4322
版權(quán)所有 (C) Microsoft Corporation 2001-2002。保留所有權(quán)利。
將生成Invokedll.exe, 可以執(zhí)行該文件.

C:\>InvokeDll
40


我們看到C#調(diào)用了非托管動(dòng)態(tài)庫(kù)的函數(shù) add 。執(zhí)行前保證 MyLib.dll 在能夠被 InvokeDll 程序加載到的路徑上。

回過(guò)頭來(lái),如果我們?cè)贛yLib.cpp中沒(méi)有加上 extern"C" 在,那么C中通過(guò)函數(shù)名 add 定位不到導(dǎo)出方法(因?yàn)楹瘮?shù)名在動(dòng)態(tài)庫(kù)中已經(jīng)變了),執(zhí)行invokeDll時(shí)就會(huì)出現(xiàn)如下錯(cuò)誤。

復(fù)制代碼 代碼如下:

C:\>InvokeDll

未處理的異常: System.EntryPointNotFoundException: 無(wú)法在 DLL MyLib.dll 中找到名為 add 的入口點(diǎn)。
at InvokeDll.add(Int32 a, Int32 b)
at InvokeDll.Main()


對(duì)于沒(méi)有加上 extern "C" 的函數(shù)原型生成的動(dòng)態(tài)庫(kù),我們就得用別的方式來(lái)調(diào)用了,具體怎么做,我現(xiàn)在還不知道。下面還有一個(gè)問(wèn)題,上面的例子只是演示了動(dòng)態(tài)庫(kù)中函數(shù)非常簡(jiǎn)單的情況,如果函數(shù)傳遞的參數(shù)是指針,或者更復(fù)雜的數(shù)據(jù)類型,又如何操作呢?以后會(huì)深究的。

[注:]本文參考著網(wǎng)上一篇文章:C-Sharp調(diào)用標(biāo)準(zhǔn)動(dòng)態(tài)庫(kù) ,但是直接照著原文的操作就是會(huì)無(wú)法定位 add 的入口點(diǎn)的錯(cuò)誤,所以略有修改。

相關(guān)文章

  • C#?WPF中RadioButton控件的用法及應(yīng)用場(chǎng)景

    C#?WPF中RadioButton控件的用法及應(yīng)用場(chǎng)景

    在WPF應(yīng)用程序中,RadioButton控件是一種常用的用戶界面元素,本文主要介紹了C#?WPF中RadioButton控件的用法及應(yīng)用場(chǎng)景,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • C#串口連接的讀取和發(fā)送詳解

    C#串口連接的讀取和發(fā)送詳解

    這篇文章主要給大家介紹了關(guān)于C#串口連接的讀取和發(fā)送的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • UnityShader使用Plane實(shí)現(xiàn)翻書效果

    UnityShader使用Plane實(shí)現(xiàn)翻書效果

    這篇文章主要為大家詳細(xì)介紹了UnityShader使用Plane實(shí)現(xiàn)翻書效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 深入解析C#中的泛型類與泛型接口

    深入解析C#中的泛型類與泛型接口

    這篇文章主要介紹了C#中的泛型類與泛型接口,對(duì)泛型的支持是C#語(yǔ)言的重要特性,需要的朋友可以參考下
    2016-02-02
  • C#加鎖防止并發(fā)的幾種方法詳解

    C#加鎖防止并發(fā)的幾種方法詳解

    文章介紹了C#中多種加鎖方式,包括lock、Monitor、SemaphoreSlim、Mutex、ReaderWriterLockSlim、Concurrent集合、Redis分布式鎖,以及在實(shí)際工作中的應(yīng)用和注意事項(xiàng),感興趣的朋友一起看看吧
    2025-03-03
  • C#使用NPOI實(shí)現(xiàn)Excel讀取數(shù)據(jù)以及保存數(shù)據(jù)

    C#使用NPOI實(shí)現(xiàn)Excel讀取數(shù)據(jù)以及保存數(shù)據(jù)

    這篇文章主要為大家詳細(xì)介紹了C#如何使用core版本的NPOI實(shí)現(xiàn)Excel讀取數(shù)據(jù)以及保存數(shù)據(jù)功能,文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2025-03-03
  • C#中高效的多線程并行處理實(shí)現(xiàn)方式詳解

    C#中高效的多線程并行處理實(shí)現(xiàn)方式詳解

    在處理大型數(shù)據(jù)集時(shí),單線程處理往往成為性能瓶頸,所以本文將詳細(xì)介紹幾種高效的多線程并行處理實(shí)現(xiàn)方式,幫助開(kāi)發(fā)者優(yōu)化數(shù)據(jù)處理流程,有需要的可以了解下
    2025-04-04
  • WinForm實(shí)現(xiàn)移除控件某個(gè)事件的方法

    WinForm實(shí)現(xiàn)移除控件某個(gè)事件的方法

    這篇文章主要介紹了WinForm實(shí)現(xiàn)移除控件某個(gè)事件的方法,對(duì)C#初學(xué)者有一定的借鑒價(jià)值,需要的朋友可以參考下
    2014-08-08
  • C#七大經(jīng)典排序算法系列(上)

    C#七大經(jīng)典排序算法系列(上)

    這篇文章主要為大家詳細(xì)介紹了C#七大經(jīng)典排序算法系列上篇,冒泡排序,快速排序等,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • C#單例模式(Singleton Pattern)詳解

    C#單例模式(Singleton Pattern)詳解

    這篇文章主要為大家詳細(xì)介紹了C#單例模式Singleton Pattern的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08

最新評(píng)論

信宜市| 安远县| 涿州市| 望都县| 通河县| 克拉玛依市| 巴东县| 沙田区| 宾阳县| 阳曲县| 织金县| 涿州市| 五寨县| 定日县| 芜湖市| 白朗县| 邢台县| 顺平县| 石家庄市| 循化| 万载县| 云安县| 乐山市| 泗阳县| 永清县| 上杭县| 长乐市| 北安市| 高陵县| 麟游县| 光泽县| 应用必备| 留坝县| 柘城县| 双柏县| 扶风县| 永春县| 金川县| 盐城市| 龙里县| 东乌珠穆沁旗|