TlbImp新版本發布:/v2 & /preserveSig

來源:互聯網
上載者:User

兩個星期之前CLR Interop小組再次發布了TlbImp的新版本。本來是早就應該寫篇Blog介紹一下的,只是一直忙於CLR Interop新功能開發,難以抽出時間。這次版本添加了兩個小功能:

1. /v2開關

在新版本的TlbImp中,我們不能隨意改變新版本的行為,以避免當使用者採用新版本的時候產生相容性問題而導致程式編譯出錯,或者行為不正確。這個開關是用來告訴TlbImp採用新版本的行為,並且忽略相容性要求。現在開啟/v2開關只有一個作用(以後會加入更多):將struct/union中的VARIANT_BOOL轉換為bool,而非以前版本的short,從而方便了使用者的使用。實際上很多使用者都在要求這個改動。老版本TlbImp的將VARIANT_BOOL轉換為short的行為是由於老版本的Interop Marshaler(應該是.NET v1.0)不支援這個轉換。之後雖然Marshaler支援了這個行為,但我們一直沒有機會對TlbImp做出相應修改。此次CodePlex發布TlbImp給了我們很好的機會來修改TlbImp使之支援這些我們一直想做但是沒有做的功能,而且也不用等到下個版本。

2. /preserveSig開關

這個功能也是很多使用者所要求的功能。一旦開啟,所有的interface/class中的方法將打上PreserveSigAttribute這個屬性,並且函數的原型也會做出相應改變,同時返回的HRESULT也不會被轉換成對應的.NET的Exception。很多時候,在進行COM調用的時候,會預期到調用失敗,並作出相應處理,並且失敗是非常常見的。在這種情況下,把HRESULT轉換成Exception則是完全沒有必要的效能損失。開啟了這個開關的話,會導致CLR不自動把HRESULT轉換成Exception,而是需要使用者自己檢查返回的HRESULT,使用和FAILED和SUCCEEDED宏所類似的方法。在使用上沒有之前拋出Exception來的方便,但是卻提供了更大的靈活性,避免不必要的效能開銷。

感興趣的朋友可以在這裡找到最新的版本:

http://www.codeplex.com/clrinterop/Release/ProjectReleases.aspx?ReleaseId=17579

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.