天天看點

.Net互操作之PInvoke

PInvoke是Platform Invoke的縮寫。開發過程中經常遇到C#項目需要調用Native C++編寫的Dll,還有就是有時候需要調用WindowsAPI,而事實上,某些Windows API也是存在于Native C++ dll或者是C dll存在的。PINVOKE是其中一種方式。

有一本書《精通.Net互操作》我還沒有讀,但是從目錄來看,書中介紹了三大方法來實作.Net與Native dll之間的互動,一個是PINVOKE;第二個是通過C++ Clr進行一次封裝,經由C# ==> C++Clr ==>Native C++;第三種是通過COM的方式。其中前兩種方式在項目開發中我都是用過,個人傾向是,如果是調用Windows API,采用PINVOKE方式;如果需要調用的是自己項目組内編寫的Native C++ dll,我傾向采用C++ Clr封裝過度的形式,這樣的好處是減少.Net工程與Native C++之間的耦合性。

PInvoke使用方法是有固定套路的,有一個非常好的網站(http://pinvoke.net/)提供了大量的Windows API在C#中的聲明方法,另外就是還提供了一個VS的插件,利用該插件可以友善的将Windows API以PInvoke的聲明方式插入到C#代碼中,很是好用。減少了開發人員自己寫PInvoke聲明時,對于Windows API中的各種各樣參數在C#中的對應類型的煩惱。

.Net互操作之PInvoke
.Net互操作之PInvoke

插件的下載下傳位址:https://visualstudiogallery.msdn.microsoft.com/9CA9D544-05D2-487B-AB49-31851483C1CC