2017-03-22 32 views
0

我需要在.NET項目中使用BITS COM https://msdn.microsoft.com/en-us/library/windows/desktop/aa362708(v=vs.85).aspx。我不能使用包裝BITS接口的第三方庫,但坦率地說,無論如何都沒有大的選擇。所以,顯然我堅持生成RCW(https://msdn.microsoft.com/en-us/library/5dxz80y2(v=vs.110).aspx),而最傳統的做法是使用tlbimp.exe來完成它的工作,但帶有警告。在結果我有一個結構標記爲ComConversionLoss需要更好的方法來創建COM互操作

[ComConversionLoss] 
[StructLayout(LayoutKind.Explicit, Size = 8, Pack = 4)] 
public struct BG_AUTH_CREDENTIALS_UNION { 
} 

最有可能的事情發生,因爲它是聯合在C++和tlbimp.exe是不知道如何生成它的權利。對於這種情況唯一的建議是用ildasm.exe對生成的DLL進行反編譯並重新編譯。我認爲技術上我可以做到,但如果有更好的方式我可能不知道。 我也發現tlbimp2.exe哪些沒有幫助我的情況下,所以我正在尋找一個更好的替代tlbimp.exe這將能夠處理這種情況下,理想情況下生成COM封裝與IDisposable實現確定性控制COM對象的生命週期,但這是一個單獨的問題。首先,我需要其他工具來正確處理我的情況(C++聯合類型)。有人知道這樣的工具嗎?

回答

0

作爲一般規則,.NET開發完全取代COM。 .NET和COM之間存在向下兼容性。但優先順序顯然是:.NET代碼(MSIL)> COM>本機代碼。

有一個比較常用的第三方.NET BITS庫。你最好使用它,而不是做COM互操作。 https://stackoverflow.com/a/2299642/3346583 夏普BITS是一個可用的開源,所以我假設你可以用它來滿足你的編碼需求。

+0

我明白你的觀點,只是爲了避免將討論切換到「爲什麼不使用包裝」的方式,我聲明「我不能使用第三方庫包裝BITS接口」。我看到了夏普BITS。這只是BITS COM的一個包裝,但相應地,我們的公司政策我無法使用它。問題是在哪裏可以找到更好的替代tlbimp.exe,如果有一個可以正確生成RCW for BITS COM的。 – Alex

+1

您可以隨時通過大堂來更改該政策。隨着編程實際的變化,有關它的政策必須適應。公司政策可能實際上是靜態的,可以在這裏使用 - 更容易改變,如設計指南migth更好。例如我的電腦俱樂部在雕像中有月費。由於法律原因,需要更換通知。他們對雕像進行了一次修改,說「確切的數值參見費用表」。現在他們可以在沒有任何進一步的通知的情況下更改費用,因爲費用表要簡單得多。 – Christopher