添加引用、dllimport、using、命名空間和dll的區別

dll是動態鏈接庫裏面有好多方法(c語言叫函數),如果調用c語言編寫的普通dll,那麼就要用dllimport,典型的像windows api函數都是c語言編寫的dll所以都要dllimport

 

com是一種與語言無關的windows規範,裏面不光有方法還有一些遵照規範的描述性信息,比如有哪些方法,叫什麼名字等。所以這種遵守windows統一規範的動態鏈接庫就不需要dllimport了,就可以“添加引用”來用,而且還可以用對象瀏覽器來看裏面都有哪些方法,而對象瀏覽器裏的這些信息就是編寫那些動態鏈接庫的人遵照com規範寫進去的,所以對象瀏覽器可以讀出來看到。然後就可以using來用了,就像用普通的.net類庫一樣,因爲和com的操作vs都封裝好了,典型的像flash組件就是。

 

===========

.net下有的命名空間可以直接using,比如system.io;

有的就必須添加.net引用後才能using,比如system.drawing,必須“添加引用”找到System.drawing確定,才能using System.drawing;

怎麼回事呢?

因爲system.io命名空間在system.dll這個程序集裏面,system.dll這個程序集包括了好多的命名空間而不只一個。

而system.io命名空間就在system.dll程序集裏面,所以就不用添加引用了。

每個.net程序至少要包括一個引用”system",就是這麼來的。因爲system.dll程序集下面有好多常用的功能了。

而像system.drawing就不在system.dll程序集裏,所以要單獨添加引用“system.drawing”,其實是添加的system.drawing.dll這個程序集。

 

 

多用Reflector看看.net自帶的程序集好多事情就豁然開朗了,.net framework其實是對api的封裝,所以,一些程序需要api又不知道怎麼用,網上也沒資料的時候,就可以用Reflector看看.net的類庫,看看微軟是怎麼用那些api的,有時就能有啓發了。比如我就解決了一個問題,建立一個console程序讓他不顯示出來在後臺運行,怎麼做?

網上有2種方法一種api findwindow showwindow,這種方法還是會晃一下,放棄。

一種是process類有個createnowindow+useshellexecute,運行就可以不顯示出來,很好。

但是現在我要在system賬號下用CreateProcessAsUser這個api函數以administrator賬號運行一個控制檯程序,讓他不顯示出來在後臺運行,而且沒有administrator的密碼無法直接用process類咋辦呢?

所以我就用reflector看一下process類的start方法是怎麼執行的,於是找到了這個,process類用的createprocess這個api,並把其中的creationFlags的值設爲了0x8000000所以就可以建立不顯示的console了,所以把這個flag套用到createprocessasuser,嘿嘿,在system賬號下無密碼以administrator賬號運行程序而且不顯示後臺運行成功了。

發佈了31 篇原創文章 · 獲贊 10 · 訪問量 65萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章