亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

關于C#中的DLLImport

2019-11-18 16:53:46
字體:
來源:轉載
供稿:網友

MSDN中對DllImportAttribute的解釋是這樣的:可將該屬性應用于方法。DllImportAttribute 屬性提供對從非托管 DLL 導出的函數進行調用所必需的信息。作為最低要求,必須提供包含入口點的 DLL 的名稱。

并給了一個示例:

[DllImport("KERNEL32.DLL", EntryPoint="MoveFileW",  SetLastError=true,

CharSet=CharSet.Unicode, ExactSpelling=true,

CallingConvention=CallingConvention.StdCall)]

public static extern bool MoveFile(String src, String dst);

 

上網搜了一下,最常見的就是使用它來調用WIN32的API,例如上面所示?;蛘哒{用一下C或C++編寫的DLL。

這東西沒怎么用過。只是前幾天忽然分配下一個臨時的任務,做一個“停車廠管理”的小東西,聽說是一個大干部的小孩子要弄這么個東西,那干部是公司的客戶,討論正經事之余又拜托了我們做這么個小東西。其中用到了單片機模擬車輛出入的一些信號。

我對單片機一竅不通,好在有人寫好了輪詢單片機的DLL,我只管調用,由于是C++寫的,于是將DLL拷貝到BIN目錄后(這DLLImport會從程序啟動目錄開始查找相應名稱的DLL,未找到則轉至system32下查找),用DllImport來調用,但在這個過程中遇到了幾個問題:

 

1.看了一下C++的代碼,需要用到的只有三個方法:

bool OpenSerialPort1()

bool fnGetIO(unsigned char& P1, unsigned char& P2, unsigned char& P3)

bool CloseSerialPort1()

于是就在自己的程序中寫了:

using System.Runtime.InteropServices;

……

[DllImport("GetIODll.dll", EntryPoint = "OpenSerialPort1")]

public static extern bool OpenSerialPort1();

[DllImport("GetIODll.dll", EntryPoint = "fnGetIO")]

public static extern bool fnGetIO(ref byte P1, ref byte P2, ref byte P3);

[DllImport("GetIODll.dll", EntryPoint = "CloseSerialPort1")]

public static extern bool CloseSerialPort1();

然而程序在運行時無論如何總是提示“找不到入口點”,搞得懵了,只好上網搜去,最后下了一個叫eXeScope的小軟件,裝完之后查看該DLL,果然如貼子中寫的,DLL中的函數名稱發生了變化,分別成了:

?OpenSerialPort1@@YA_NXZ

?fnGetIO@@YA_NAAE00@Z

?CloseSerialPort1@@YA_NXZ

將這些怪怪的名稱代入到EntryPoin中,編譯運行,沒有問題了。

 

2.可是接上單片機之后,問題又來了,雖然OpenSerialPort1返回的結果是true,但fnGetIO讀出一數據全是0,按理應該是全1才對。來了一個同事,說反正有源碼,把原來的DLL弄成標準C的試試,標準C不標準C的我也沒明白,讓那人給改了一下,把編譯之后的DLL拷到自己程序的BIN下,將EntryPoin換成正常的函數名,運行,這回是真的OK了。

 

讀寫.ini文件時,也會用到DllImport,不過現在.ini文件好像用得少了,下面是讀寫的程序:

{

publicstring path;

[DllImport("kernel32")]

PRivatestaticexternlong WritePrivateProfileString(string section,string key,string val,string filePath);

[DllImport("kernel32")]

privatestaticexternint GetPrivateProfileString(string section,string key,string def,StringBuilder

retVal,int size,string filePath);

public IniFile(string INipath)

{

       path = INIPath;

}

publicvoid IniWriteValue(string Section,string Key,string Value)

{

       WritePrivateProfileString(Section,Key,Value,this.path);

}

publicstring IniReadValue(string Section,string Key)

{

       StringBuilder temp = new StringBuilder(255);

       int i = GetPrivateProfileString(Section,Key,"",temp,255,this.path);

       return temp.ToString();

}

}

 

網上關于DllImport的很多問題是由于所調方法的參數比較復雜,現在我還沒用到,看到一篇貼子,參數中帶指針的,也先錄下來,以備將來查用:

參數是用指針來獲取一個數組:Int GetData(byte * pBuffer)  

pBuffer是數組的首地址,也就是說GetData會寫pBuffer[0],pBuffer[1]....pBuffer[100];

答曰:

[DllImport("yourDllFile.dll"]  

Private static extern int GetValue([MarshalAs(UnmanagedType.LPArray)]byte[] pValue);

 

如果是out參數,可以如下  

[DllImport("yourDllFile.dll")]  

Private static extern int GetValue([Out,MarshalAs(UnmanagedType.LPArray)]byte[] pValue);

http://www.49028c.com/KissKnife/archive/2006/11/04/549990.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日本午夜精品理论片a级appf发布| 91产国在线观看动作片喷水| 亚洲国产精品va在线观看黑人| 亚洲美女黄色片| 性欧美暴力猛交69hd| 欧美性资源免费| 欧美一级大片视频| 亚洲精品一区中文| 亚洲免费av网址| 插插插亚洲综合网| 亚洲精品98久久久久久中文字幕| 久久久91精品国产一区不卡| 亚洲qvod图片区电影| 欧美日韩裸体免费视频| 精品视频久久久| 亚洲一区二区日本| 亚洲美女性视频| 国产欧美一区二区白浆黑人| 亚洲的天堂在线中文字幕| 欧美日本黄视频| 欧美性xxxxx极品| 高清欧美性猛交| 亚洲精品国产精品国自产在线| xvideos亚洲人网站| 欧美日韩国产va另类| 一区二区亚洲欧洲国产日韩| 亚洲网站在线播放| 91视频8mav| 久久夜精品va视频免费观看| 91精品国产高清自在线看超| 国产成人一区二区三区电影| 精品久久久久久久久久久久久久| 欧美另类99xxxxx| 久久综合九色九九| 在线亚洲国产精品网| 日本道色综合久久影院| 国产精品视频在线观看| 国产成人高清激情视频在线观看| 俺也去精品视频在线观看| 国产精品在线看| 国产欧美一区二区三区视频| 国产精品免费视频久久久| 久久视频这里只有精品| 国产精品丝袜白浆摸在线| 欧美视频中文在线看| 欧美日韩亚洲系列| 国产成人亚洲精品| www.日韩不卡电影av| 91高潮精品免费porn| 欧美成人精品一区二区三区| 美女福利精品视频| 亚洲国产精品99| 国产欧美久久久久久| 国产精品99久久久久久白浆小说| 国产精品久久久久aaaa九色| 亚洲欧洲激情在线| 久久九九精品99国产精品| 国产一区二区三区网站| 日日摸夜夜添一区| 欧美激情一二区| 日本道色综合久久影院| 国产日韩在线视频| 影音先锋欧美在线资源| 精品美女国产在线| 欧美激情久久久久久| 国产精品video| 亚洲热线99精品视频| 国产精品一区二区在线| 国产va免费精品高清在线观看| 亚洲福利视频在线| 欧美成人午夜免费视在线看片| 97久久精品视频| 欧美日韩亚洲网| 国产精品久久久久999| 国产精品第七十二页| 亚洲综合大片69999| 欧美激情一区二区三区高清视频| 亚洲欧美中文日韩在线| 色老头一区二区三区在线观看| 久久最新资源网| 欧美一性一乱一交一视频| 国产精品青青在线观看爽香蕉| 亚洲一区二区福利| 欧美成人中文字幕在线| 91久久精品美女| 北条麻妃99精品青青久久| 亚洲激情免费观看| 中文字幕欧美专区| 福利微拍一区二区| 国产欧美最新羞羞视频在线观看| 日韩电影大全免费观看2023年上| 欧美黑人又粗大| 欧美日韩国产中字| 国产剧情日韩欧美| 亚洲香蕉av在线一区二区三区| 国产精品美女网站| x99av成人免费| 欧美韩国理论所午夜片917电影| 狠狠久久亚洲欧美专区| 日韩电影免费观看中文字幕| 亚洲网址你懂得| 精品国内产的精品视频在线观看| 国产精品女人久久久久久| 亚洲xxxxx性| 久久久噜久噜久久综合| 亚洲电影在线看| 夜夜嗨av一区二区三区免费区| 亚洲aa在线观看| 少妇精69xxtheporn| 中文字幕久热精品在线视频| 久久综合九色九九| 日韩精品在线免费观看视频| 日韩亚洲欧美中文高清在线| 亚洲字幕一区二区| 久久精品视频播放| 亚洲第一福利视频| 欧美激情精品久久久久久| 日韩风俗一区 二区| 久久久久久久久91| 欧美日韩国产限制| 亚洲va欧美va在线观看| 欧美另类老肥妇| 国产成人高清激情视频在线观看| 日韩在线观看视频免费| 亚洲成人久久久久| 成人深夜直播免费观看| 亚洲精品天天看| 久久精品99无色码中文字幕| 国产精品爱啪在线线免费观看| 欧美日韩国产页| 亚洲影院高清在线| 国产日韩欧美在线观看| 另类色图亚洲色图| 欧美第一黄网免费网站| 欧美午夜精品久久久久久人妖| 97香蕉超级碰碰久久免费的优势| 久久久久国色av免费观看性色| 国产精品久久久av| 久久久精品国产一区二区| 在线亚洲欧美视频| 国产成人一区二| 精品一区二区三区四区在线| 成人写真视频福利网| 欧美日韩性视频在线| 欧美大人香蕉在线| 欧美肥老太性生活视频| 久久99视频免费| 国产精品入口日韩视频大尺度| 日韩欧美国产高清91| 欧美激情久久久久久| 91久久久精品| 亚洲人成电影在线观看天堂色| 日韩av在线精品| 成人两性免费视频| 亚洲第五色综合网| 亚洲欧美在线一区二区| 国产主播精品在线| 久久人人看视频| 亚洲午夜久久久久久久| 欧美国产高跟鞋裸体秀xxxhd| 亚洲影影院av| 亚洲精品乱码久久久久久按摩观| 日本视频久久久| 日本精品va在线观看|