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

兩個星期之前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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章