精通.NET互操作

出版時(shí)間:2009-5  出版社:人民郵電出版社  作者:黃際洲,崔曉源  頁數(shù):419  
Tag標(biāo)簽:無  

前言

自從2000年微軟公司.NET平臺(tái)問世以來,全球已經(jīng)有超過400萬開發(fā)人員使用.NET平臺(tái)進(jìn)行軟件開發(fā)。對(duì)于.NET來說,這無疑是一個(gè)巨大的成功。這不僅僅體現(xiàn)在商業(yè)上的成功,其核心價(jià)值在于.NET為基于微軟Windows平臺(tái)的軟件開發(fā)過程提供了一種新穎、高效的編程模型。在該模型下,開發(fā)人員能夠更容易地將精力集中在其特定的開發(fā)情景中,而不用過多地關(guān)注消息循環(huán)、窗口過程等操作系統(tǒng)底層的處理。目前,基于-NET平臺(tái)的技術(shù)和開發(fā)環(huán)境正處于飛速發(fā)展的時(shí)期。在本書即將出版之際,微軟公司已經(jīng)正式發(fā)布了NET Framework 4.O所支持的新特性以及預(yù)覽版。另一方面,由于歷史的原因,在.NET出現(xiàn)之前,開發(fā)人員已經(jīng)編寫了大量經(jīng)過嚴(yán)格測(cè)試且可復(fù)用的非托管代碼。它們以C庫函數(shù)、C++類庫以及COM組件的形式存在于諸多應(yīng)用程序和框架之中,并承擔(dān)著非常重要的角色。但由于在托管和非托管對(duì)象模型之間,數(shù)據(jù)類型、方法簽名和錯(cuò)誤處理機(jī)制都存在很大差異,從而使兩種編程模型之間的代碼互用和移植更加復(fù)雜。因此,在很長一段時(shí)期內(nèi),開發(fā)人員必須面對(duì).NET與久經(jīng)考驗(yàn)的“遺留代碼(1egacy code)”長期并存的局面。當(dāng)然,開發(fā)人員可以選擇.NET平臺(tái),使用托管代碼重寫這些已有的非托管代碼。但這個(gè)重寫的過程勢(shì)必會(huì)枯燥無味,而且項(xiàng)目經(jīng)理也不會(huì)在項(xiàng)目進(jìn)度中安排大量的時(shí)間以進(jìn)行重寫代碼的工作。更讓開發(fā)人員感到尷尬的是,很多時(shí)候,即使花了很大代價(jià)對(duì)非托管代碼進(jìn)行了重寫,但還是不能保證重寫后的托管代碼像那些久經(jīng)考驗(yàn)的非托管代碼一樣正?;蚋咝У毓ぷ鳌R虼嗽诤芏嗲闆r下,重用已有非托管代碼就成了最經(jīng)濟(jì)、可行的解決方案。以下是這些情況中的一些典型案例。開發(fā)人員所在的部門一直使用第三方提供的COM組件為產(chǎn)品的核心功能提供支持。而新業(yè)務(wù)要求使用.NET平臺(tái)。這就出現(xiàn)了一個(gè)問題。一方面公司已經(jīng)為這些COM組件投入了大量的資金,不會(huì)輕易放棄這些組件。另一方面開發(fā)部門使用.NET平臺(tái)進(jìn)行開發(fā),無法直接使用這些COM組件。因此,有效地在.NET平臺(tái)中重用這些COM組件就成為產(chǎn)品成功的關(guān)鍵要素。

內(nèi)容概要

  本書介紹Windows平臺(tái)上的托管代碼與非托管代碼之間進(jìn)行互操作的各種技術(shù),包括由.NET提供的各種互操作方法、屬性以及各種工具的用法及其工作原理。本書包括3部分,平臺(tái)調(diào)用——主要用于解決在托管代碼中調(diào)用非托管程序設(shè)計(jì)語言編寫的flat API(如Win32 API、C/C++風(fēng)格的API等)的問題;C++ Interop——技術(shù)專門用于解決托管代碼與C++編寫的非托管代碼之間的互操作問題;COM Interop——介紹了使用COM Interop解決在托管代碼中調(diào)用COM組件,以及在COM中調(diào)用托管類型的問題?! ”緯m合所有在開發(fā)過程中需要涉及到托管代碼與非托管代碼進(jìn)行交互操作的.NET開發(fā)人員閱讀使用。不論是開始學(xué)習(xí).NET編程的開發(fā)人員,還是剛剛接觸互操作的資深.NET開發(fā)人員,都能從本書中獲益。

作者簡(jiǎn)介

黃際洲,2004-2007年連續(xù)四年微軟最有價(jià)值專家(MVP)。感興趣的研究方向主要包括自然語言處理、信息檢索、聊天機(jī)器人等。他曾翻譯了三本游戲編程方面的書籍:《Direct 3D中的2D編程》、《游戲編程All in One》及《Directx角色扮演游戲編程》。

書籍目錄

第一部分 P/Invoke 第1章 使用C/C++類型的非托管函數(shù)   1.1 平臺(tái)調(diào)用簡(jiǎn)介   1.2 Hello World!示例程序   1.3 獲得要調(diào)用的非托管函數(shù)聲明   1.4 平臺(tái)調(diào)用基礎(chǔ)知識(shí)   1.5 指定調(diào)用約定   1.6 指定入口點(diǎn)   1.7 指定字符集   1.8 處理平臺(tái)調(diào)用中的異常或錯(cuò)誤    1.8.1 非托管函數(shù)的托管定義導(dǎo)致的異?;蝈e(cuò)誤    1.8.2 非托管函數(shù)導(dǎo)致的異?;蝈e(cuò)誤   1.9 釋放非托管內(nèi)存    1.9.1 釋放由malloc方法分配的非托管內(nèi)存    1.9.2 釋放由new運(yùn)算符分配的非托管內(nèi)存   1.10 動(dòng)態(tài)平臺(tái)調(diào)用    1.10.1 平臺(tái)調(diào)用的原理和過程    1.10.2 通過手動(dòng)加載非托管DLL實(shí)現(xiàn)動(dòng)態(tài)平臺(tái)調(diào)用    1.10.3 利用反射實(shí)現(xiàn)動(dòng)態(tài)平臺(tái)調(diào)用    1.10.4 利用GetDelegateForFunctionPointer實(shí)現(xiàn)動(dòng)態(tài)平臺(tái)調(diào)用    1.11 提升平臺(tái)調(diào)用性能的技巧    1.11.1 顯式地指定要調(diào)用的非托管函數(shù)的名稱    1.11.2 對(duì)數(shù)據(jù)封送處理進(jìn)行優(yōu)化    1.11.3 盡量避免字符串編碼轉(zhuǎn)換  第2章 平臺(tái)調(diào)用中的數(shù)據(jù)封送   2.1 字符串的封送    2.1.1 封送作為參數(shù)的字符串    2.1.2 封送作為返回值的字符串    2.1.3 封送BSTR類型的字符串   2.2 封送作為參數(shù)的結(jié)構(gòu)體   2.3 封送從函數(shù)體內(nèi)部返回的結(jié)構(gòu)體    2.3.1 封送作為函數(shù)返回值返回的結(jié)構(gòu)體    2.3.2 作為函數(shù)參數(shù)返回結(jié)構(gòu)體   2.4 封送結(jié)構(gòu)體中的字符串    2.4.1 結(jié)構(gòu)體中的字符指針字段    2.4.2 結(jié)構(gòu)體中的字符數(shù)組字段   2.5 控制結(jié)構(gòu)體字段的封送行為   2.6 控制結(jié)構(gòu)體的內(nèi)存布局    2.6.1 定義結(jié)構(gòu)體的部分字段    2.6.2 聯(lián)合體的封送   2.7 封送嵌套的結(jié)構(gòu)體    2.7.1 指向結(jié)構(gòu)體指針字段的嵌套形式    2.7.2 結(jié)構(gòu)體實(shí)例字段的嵌套形式   2.8 封送類    2.8.1 封送引用類型的簡(jiǎn)單示例    2.8.2 封送blittable引用類型    2.8.3 將引用類型封送為指向指針的指針   2.9 封送數(shù)組    2.9.1 封送簡(jiǎn)單類型數(shù)組    2.9.2 封送字符串?dāng)?shù)組   2.10 實(shí)戰(zhàn)演練    2.10.1 背景介紹    2.10.2 模塊介紹    2.10.3 實(shí)現(xiàn)平臺(tái)調(diào)用  第3章 使用平臺(tái)調(diào)用技術(shù)調(diào)用Win32 API   3.1 確定要調(diào)用的函數(shù)   3.2 處理Win32函數(shù)返回的錯(cuò)誤碼   3.3 處理回調(diào)函數(shù)   3.4 使用Windows定義的常量   3.5 封送Win32數(shù)據(jù)類型    3.5.1 可直接復(fù)制到本機(jī)結(jié)構(gòu)中的數(shù)據(jù)類型    3.5.2 非直接復(fù)制到本機(jī)結(jié)構(gòu)中的數(shù)據(jù)類型   3.6 處理句柄   3.7 傳遞托管對(duì)象   3.8 使用P/Invoke調(diào)用Win32 API的最佳實(shí)踐    3.8.1 編碼規(guī)范    3.8.2 性能    3.8.3 安全性    3.8.4 盡量使用Win32函數(shù)對(duì)應(yīng)的.NET托管實(shí)現(xiàn) 第二部分 C++ Interop 第4章 C++ Interop 第三部分 COM Interop 第5章 在.NET中使用COM組件  第6章 在COM中使用.NET程序集 附錄A 光盤內(nèi)容介紹 附錄B 有關(guān)互操作技術(shù)的互聯(lián)網(wǎng)資源 附錄C 本書所用術(shù)語表 

章節(jié)摘錄

插圖:本節(jié)主要講述了3種優(yōu)化平臺(tái)調(diào)用性能的方法。(1)將。Dlllmport屬性的ExactSpelling字段設(shè)置為true,顯式地指定要調(diào)用的非托管函數(shù)的名稱,以優(yōu)化平臺(tái)調(diào)用在非托管DLL中搜索函數(shù)的方式。(2)盡可能地使用blittable類型。由于采用blittable類型能夠減少平臺(tái)調(diào)用過程中耗費(fèi)在數(shù)據(jù)封送處理上的時(shí)間,從而能極大地提升平臺(tái)調(diào)用的性能。(3)盡可能避免從LJnieode到ANSI的轉(zhuǎn)換。由于.NET采用的是unicode編碼,如果要調(diào)用的非托管函數(shù)接收的是ANSI字符(串),那么封送拆收器必須先將字符(串)從LJnieode轉(zhuǎn)換為ANSI,再從托管內(nèi)存中將字符(串)復(fù)制到非托管內(nèi)存中。這樣不僅編碼轉(zhuǎn)換會(huì)犧牲性能,而且復(fù)制操作也會(huì)耗費(fèi)時(shí)間。除了上面介紹的這3種經(jīng)過對(duì)比測(cè)試一一驗(yàn)證了的、優(yōu)化平臺(tái)調(diào)用性能的方法外,還有其他一些可以優(yōu)化平臺(tái)調(diào)用性能的方法。比如采用IntPtr作為復(fù)雜類型的封送數(shù)據(jù)類型,或盡可能減少平臺(tái)調(diào)用次數(shù),在非托管代碼中盡可能多地完成操作,而只進(jìn)行獲取最終計(jì)算結(jié)果的平臺(tái)調(diào)用等,這些方法都能夠提升平臺(tái)調(diào)用的性能。在實(shí)際進(jìn)行平臺(tái)調(diào)用時(shí),需要對(duì)造成性能損耗的原因進(jìn)行深入分析,只有弄清了造成損耗的原因,才能更有針對(duì)性地進(jìn)行性能優(yōu)化。

媒體關(guān)注與評(píng)論

托管代碼與非托管代碼之間的交互是許多程序員在.NET開發(fā)平臺(tái)上不得不面對(duì)的任務(wù)?!毒?NET互操作:P/Invoke,C++Interop和COM Interop》這本書深入而透徹地解析了.NET支持的三種與原生代碼互操作的技術(shù),作者以自己的經(jīng)驗(yàn)講述了原生代碼與托管代碼之間互操作所涉及到的編程要點(diǎn),以及背后的一些實(shí)現(xiàn)原理。書中提供的實(shí)例有助于程序員快速領(lǐng)會(huì)并掌握.NET與原生代碼互操作技術(shù)的用法。我建議在.NFT平臺(tái)上工作的程序員讀一讀這本書。 ——潘愛民,著名技術(shù)作家,著有《COM原理與應(yīng)用》等多部暢銷書,并翻譯了多部經(jīng)典名作

編輯推薦

《精通.NET互操作P/Invoke,C++Interop和COM Interop》涵蓋了:使用P/Invoke調(diào)用C庫函數(shù)及windows API;使用C++Interop與C++類庫及核心算法庫進(jìn)行交互;使用COM Interop實(shí)現(xiàn)托管代碼與COM之間的交互。

圖書封面

圖書標(biāo)簽Tags

評(píng)論、評(píng)分、閱讀與下載


    精通.NET互操作 PDF格式下載


用戶評(píng)論 (總計(jì)36條)

 
 

  •   利用c++原有代碼的好書
  •   了解平臺(tái)調(diào)用,對(duì)反射與***+等有一定介紹,很不多的東西,屬于基本功的范疇,推薦了
  •   本書全面地介紹了P/INVOKE等****底層技術(shù)
  •   還沒來得及細(xì)看,看了看目錄,對(duì)我來說足夠了。如果只是偶爾用互操作,已經(jīng)相當(dāng)不錯(cuò)了。
  •   互操作必備
  •   這本書寫的相當(dāng)?shù)牟诲e(cuò),里面很多內(nèi)容在網(wǎng)上我都沒搜到。正是我需要的
  •   經(jīng)典的東西,但是需要有一定的****基礎(chǔ)
  •   商品不錯(cuò),是正版的。
  •   剛拿到手,翻了幾頁,幾個(gè)關(guān)注的地方都有相關(guān)的內(nèi)容。

    沒有廢話,講得很到位。
  •   看得出來,該書為作者經(jīng)驗(yàn)之作,是傾注了作者心血的一本值得推薦的好書
  •   好?。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。?!
  •   被托管與非托管的交互問題困擾很久了,終于抓到根救命稻草……
  •   這本書著眼于CLR代碼與native代碼的交互,并不是原理性書籍,屬于進(jìn)階級(jí)****叢書。深度上適合大多數(shù)****開發(fā)者的需要。
  •   這書對(duì)實(shí)際的開發(fā)有幫助,可以參考,不錯(cuò)
  •   因?yàn)橐鉀Q自己用vb做的ocx在****下老是出錯(cuò)的問題,所以買的這本書。也的確有這方面的問題,不過真的很專業(yè),所以我看得很吃力。然后,我只能放下書,用最原始的辦法解決了:把ocx從最簡(jiǎn)單的形式逐步增加功能,直到定位出問題。
  •   剛剛收到這本書,覺得質(zhì)量還挺好的,大體翻了一下里面的內(nèi)容挺好的,由淺入深的介紹
  •   這在做一個(gè)項(xiàng)目需要C++與C#交互正好管用
  •   比較深?yuàn)W,如果會(huì)vc++ 會(huì)好點(diǎn)
  •   使一本好書
  •   應(yīng)該不是你們的問題,可能是快遞沒怎么注意.不過你們的速度還是可以的.
  •   書的紙張感覺很粗糙,而且光盤斷了!
  •   書沒來的及看,光盤是壞的。
  •   前兩天買的 只看了第一部分 感覺很不好 當(dāng)然還是有啟蒙作用的 但對(duì)于實(shí)際應(yīng)用中解決問題的幫助不大 連結(jié)構(gòu)數(shù)組都沒怎講到(我現(xiàn)在遇到的問題就是非托管DLL中封送結(jié)構(gòu)數(shù)組,結(jié)構(gòu)里有結(jié)構(gòu)、結(jié)構(gòu)中有聯(lián)合、要考慮1字節(jié)對(duì)齊等) 當(dāng)然 感覺作者應(yīng)該是有水平的 書中的案例等也寫得很詳細(xì) 但對(duì)于這方面的能力應(yīng)該還不至于專家級(jí)別 從心而論 如果為了解決像我那樣的類似實(shí)際問題 這本書不值得購買 對(duì)于開始著手學(xué)習(xí)這方面的倒是可以好好學(xué)習(xí)下

    如果以后作者能豐富一些內(nèi)容 更深入一些 我也許會(huì)購買下一作品 對(duì)書不對(duì)人 見諒
  •   不管是入門還是作為有經(jīng)驗(yàn)的開發(fā)者翻看,都非常適合。
  •   在網(wǎng)上看到了相關(guān)的介紹,感覺這本書的知識(shí)點(diǎn)和用例比較豐富。學(xué)習(xí)應(yīng)用都不錯(cuò)。
  •   書不錯(cuò),但是發(fā)過來的書有點(diǎn)舊
  •   質(zhì)量真不錯(cuò) 內(nèi)容具體沒看 !
  •   書上是不錯(cuò),發(fā)給我的時(shí)候封面很臟,還缺了角……沒有時(shí)間找他們客戶和售后,希望以后不要有類似情況。在這個(gè)網(wǎng)站也買了好多書,但很少發(fā)評(píng)論……
  •   像極二手書,再也不在卓越買書了。封皮像放了20年的樣子,還很臟。
  •   內(nèi)容將的很詳細(xì), 也很實(shí)用對(duì)菜鳥或是大蝦同樣有用
  •   比較適合我最近研究的方向, 還再看, 沒有看完. 配套的還有一些工具軟件. 挺好
  •   紙張的質(zhì)量真泥馬坑爹!
  •   雖然我現(xiàn)在只學(xué)了c++,C#還不是很了解,托管C++知道一些,但我對(duì)托管環(huán)境和非托管環(huán)境的交互很感興趣。相信先看了這本書以后再學(xué)習(xí)C#收獲會(huì)更大的。
  •   唯一的一本全面描述互操作的書籍,寫得挺好,真是不容易!
  •   看來下這本書,寫的非常不錯(cuò),能看出來作者有很深的實(shí)踐功力,寫的很詳細(xì)也很有條理,里面的例子也很典型...好好學(xué)習(xí)對(duì)提示功力有很大的幫助...超贊的書
  •   以前搞P/Invoke的時(shí)候總感覺學(xué)習(xí)資料分散,無法系統(tǒng)學(xué)習(xí)。一口氣看完前3章,感覺真爽。這本書由淺入深,既適合初學(xué)者入門,又能幫助有一定基礎(chǔ)的.net開發(fā)人員深入理解.net互操作技術(shù)的本質(zhì)。推薦??!
 

250萬本中文圖書簡(jiǎn)介、評(píng)論、評(píng)分,PDF格式免費(fèi)下載。 第一圖書網(wǎng) 手機(jī)版

京ICP備13047387號(hào)-7