成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C#調用DLL的方法

開發 后端
本文介紹C#調用DLL的方法,每種編程語言調用DLL的方法都不盡相同,首先,您需要了解什么是托管,什么是非托管。

一.C#調用DLL與應用程序

動態鏈接庫(也稱為DLL,即為“Dynamic Link Library”的縮寫)是Microsoft Windows最重要的組成要素之一,打開Windows系統文件夾,你會發現文件夾中有很多DLL文件,Windows就是將一些主要的系統功能以DLL模塊的形式實現。

動態鏈接庫是不能直接執行的,也不能接收消息,它只是一個獨立的文件,其中包含能被程序或其它DLL調用來完成一定操作的函數(方法。注:C#中一般稱為“方法”),但這些函數不是執行程序本身的一部分,而是根據進程的需要按需載入,此時才能發揮作用。

DLL只有在應用程序需要時才被系統加載到進程的虛擬空間中,成為調用進程的一部分,此時該DLL也只能被該進程的線程訪問,它的句柄可以被調用進程所使用,而調用進程的句柄也可以被該DLL所使用。在內存中,一個DLL只有一個實例,且它的編制與具體的編程語言和編譯器都沒有關系,所以可以通過DLL來實現混合語言編程。DLL函數中的代碼所創建的任何對象(包括變量)都歸調用它的線程或進程所有。

下面列出了當程序使用 DLL 時提供的一些優點:

1)使用較少的資源

當多個程序使用同一個函數庫時,DLL 可以減少在磁盤和物理內存中加載的代碼的重復量。這不僅可以大大影響在前臺運行的程序,而且可以大大影響其他在 Windows 操作系統上運行的程序。

2)推廣模塊式體系結構

DLL 有助于促進模塊式程序的開發。這可以幫助您開發要求提供多個語言版本的大型程序或要求具有模塊式體系結構的程序。模塊式程序的一個示例是具有多個可以在運行時動態加載的模塊的計帳程序。

3)簡化部署和安裝

當 DLL 中的函數需要更新或修復時,部署和安裝 DLL 不要求重新建立程序與該 DLL 的鏈接。此外,如果多個程序使用同一個 DLL,那么多個程序都將從該更新或修復中獲益。當您使用定期更新或修復的第三方 DLL 時,此問題可能會更頻繁地出現。

二.DLL的調用

每種編程語言調用DLL的方法都不盡相同,在此只對用C#調用DLL的方法進行介紹。首先,您需要了解什么是托管,什么是非托管。一般可以認為:非托管代碼主要是基于win 32平臺開發的DLL,activeX的組件,托管代碼是基于.net平臺開發的。如果您想深入了解托管與非托管的關系與區別,及它們的運行機制,請您自行查找資料,本文件在此不作討論。

C#調用DLL中的非托管函數一般方法

首先,應該在C#語言源程序中聲明外部方法,其基本形式是:

[DLLImport(“DLL文件”)]

修飾符 extern 返回變量類型 方法名稱 (參數列表)

其中:

DLL文件:包含定義外部方法的庫文件。修飾符: 訪問修飾符,除了abstract以外在聲明方法時可以使用的修飾符。返回變量類型:在DLL文件中你需調用方法的返回變量類型。方法名稱:在DLL文件中你需調用方法的名稱。參數列表:在DLL文件中你需調用方法的列表。

注意:需要在程序聲明中使用System.Runtime.InteropServices命名空間。

DllImport只能放置在方法聲明上。

DLL文件必須位于程序當前目錄或系統定義的查詢路徑中(即:系統環境變量中Path所設置的路徑)。

返回變量類型、方法名稱、參數列表一定要與DLL文件中的定義相一致。

若要使用其它函數名,可以使用EntryPoint屬性設置,如:
[DllImport("user32.dll", EntryPoint="MessageBoxA")]
static extern int MsgBox(int hWnd, string msg, string caption, int type);

其它可選的 DllImportAttribute 屬性:
◆CharSet 指示用在入口點中的字符集,如:CharSet=CharSet.Ansi;
◆SetLastError 指示方法是否保留 Win32"上一錯誤",如:SetLastError=true;
◆ExactSpelling 指示 EntryPoint 是否必須與指示的入口點的拼寫完全匹配,如:ExactSpelling=false;
◆PreserveSig指示方法的簽名應當被保留還是被轉換, 如:PreserveSig=true;
◆CallingConvention指示入口點的調用約定, 如:CallingConvention=CallingConvention.Winapi;

【編輯推薦】

  1. 淺談C#中構造函數和成員函數
  2. C#函數的參數返回結構數組
  3. 概述ASP.NET中的NGWS Runtime
  4. C#函數與JavaScript函數
  5. 詳解C# Object.Equals函數
責任編輯:佚名 來源: IT168
相關推薦

2009-08-05 09:40:02

C#調用DLL函數

2009-08-05 09:30:39

C#調用DLL函數

2011-04-08 09:52:44

C++C#DLL

2009-07-31 17:28:35

C#語言調用DLL

2009-08-07 17:22:36

C#調用dll導出函數

2009-08-05 17:06:39

ASP調用C# DLL

2009-08-05 16:41:36

C#調用VC dll

2009-09-02 17:16:01

冒泡排序

2009-08-05 15:04:14

C# dll注入

2009-08-05 09:22:43

C#調用VC DLL

2009-08-05 16:49:42

C#中調用dll

2009-08-05 09:09:14

C#調用VC DLL接

2009-08-31 16:33:28

C#調用Dispose

2009-08-31 18:05:14

C#調用WalkTre

2010-06-17 11:51:20

java.net DLLC#

2009-09-01 11:04:59

C#調用擴展方法

2011-03-31 09:13:00

Visual Stud

2024-05-16 12:33:37

C#編程指針

2024-03-01 20:59:11

C#DLL開發

2009-07-31 14:54:48

dll函數C#導出
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 在线观看久草 | 国产欧美性成人精品午夜 | 久久精品国产99国产精品 | 91精品国产91久久综合桃花 | 欧美一级久久精品 | 国产农村妇女精品一二区 | 久久99国产精品久久99果冻传媒 | 久久国产一区二区 | 免费观看一区二区三区毛片 | 国产精品成人在线播放 | 91精品国产一区二区三区 | 中文字幕国产精品 | 97久久精品午夜一区二区 | 色www精品视频在线观看 | 欧美日韩在线免费 | 亚洲啊v| 黑人久久 | 精品视频国产 | 久久婷婷色 | 91原创视频 | 亚洲综合无码一区二区 | 91中文视频| 久久精品男人的天堂 | 日韩视频一区二区三区 | 欧美性一区二区三区 | 最近日韩中文字幕 | 欧美日韩在线视频一区 | 欧产日产国产精品视频 | 日韩色在线 | 国产日韩欧美一区 | 久久99精品久久久久久琪琪 | 最新中文字幕在线 | 久久久久国产一区二区三区 | 日韩精品一区二区三区中文字幕 | 欧美一区二区久久 | 欧美激情久久久久久 | 国产精品一卡 | 特黄特黄a级毛片免费专区 av网站免费在线观看 | 日韩中文字幕在线视频观看 | 国产小视频在线 | 欧美日韩免费视频 |