精通.NET互操作

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

前言

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

內(nèi)容概要

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

作者簡(jiǎn)介

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

書(shū)籍目錄

第一部分 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)用中的異?;蝈e(cuò)誤    1.8.1 非托管函數(shù)的托管定義導(dǎo)致的異?;蝈e(cuò)誤    1.8.2 非托管函數(shù)導(dǎo)致的異常或錯(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)用的原理和過(guò)程    1.10.2 通過(guò)手動(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 光盤(pán)內(nèi)容介紹 附錄B 有關(guān)互操作技術(shù)的互聯(lián)網(wǎng)資源 附錄C 本書(shū)所用術(shù)語(yǔ)表 

章節(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)用過(guò)程中耗費(fèi)在數(shù)據(jù)封送處理上的時(shí)間,從而能極大地提升平臺(tái)調(diào)用的性能。(3)盡可能避免從LJnieode到ANSI的轉(zhuǎn)換。由于.NET采用的是unicode編碼,如果要調(diào)用的非托管函數(shù)接收的是ANSI字符(串),那么封送拆收器必須先將字符(串)從LJnieode轉(zhuǎn)換為ANSI,再?gòu)耐泄軆?nèi)存中將字符(串)復(fù)制到非托管內(nèi)存中。這樣不僅編碼轉(zhuǎn)換會(huì)犧牲性能,而且復(fù)制操作也會(huì)耗費(fèi)時(shí)間。除了上面介紹的這3種經(jīng)過(guò)對(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開(kāi)發(fā)平臺(tái)上不得不面對(duì)的任務(wù)。《精通.NET互操作:P/Invoke,C++Interop和COM Interop》這本書(shū)深入而透徹地解析了.NET支持的三種與原生代碼互操作的技術(shù),作者以自己的經(jīng)驗(yàn)講述了原生代碼與托管代碼之間互操作所涉及到的編程要點(diǎn),以及背后的一些實(shí)現(xiàn)原理。書(shū)中提供的實(shí)例有助于程序員快速領(lǐng)會(huì)并掌握.NET與原生代碼互操作技術(shù)的用法。我建議在.NFT平臺(tái)上工作的程序員讀一讀這本書(shū)。 ——潘愛(ài)民,著名技術(shù)作家,著有《COM原理與應(yīng)用》等多部暢銷書(shū),并翻譯了多部經(jīng)典名作

編輯推薦

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

圖書(shū)封面

圖書(shū)標(biāo)簽Tags

無(wú)

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


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


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

 
 

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

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

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

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

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