2017-03-22 9 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ですが、その作業は警告を伴っています。その結果私は1つの構造は、それがC++で組合で、Tlbimp.exeを右にそれを生成する方法を知らなかったので、それが起こったComConversionLossCOM相互運用機能を作成するには、より良い方法が必要です

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

ほとんどの場合としてマークされています。そのような場合の唯一の提案は、生成されたDLLをildasm.exeで逆コンパイルして修正し、再コンパイルすることでした。私は技術的に私はそれをすることができると思うが、もし私がおそらく知らないより良い方法があるならば、むしろそうするだろう。 私もtlbimp2.exeを見つけましたが、私の場合は役に立たなかったので、tlbimp.exeの代わりに、このケースを処理し、理想的にはIDisposableの実装を持つCOMラッパーを生成することができますCOMオブジェクトの存続時間ですが、これは別の質問です。まず、私のケース(C++のユニオンタイプ)を適切に処理するためのツールが必要です。誰もそのようなツールを知っていますか?

答えて

0

一般的に、.NETはCOMを完全に置き換えるために開発されました。 .NETとCOMの間には下位互換性があります。しかし、優先順位は明確です:.NETコード(MSIL)> COM>ネイティブコード。

多少一般的に使用される第三者.NET BITSライブラリがあります。 COM interopをまったくやっているのではなく、それを使用する方が良いでしょう。 https://stackoverflow.com/a/2299642/3346583 Sharp BITSはオープンソースなので、コーディングのために使用することができます。

+0

私は「私はBITSインターフェイスを包むサードパーティのライブラリを使用することはできません」と述べ、「なぜラッパーを使用しないのか」という議論に切り替えるのを避けるためです。私はシャープBITSを見た。それはBITS COMのラッパーですが、私たちの会社のポリシーにはそれを使用できません。問題は、BITS COM用のRCWを正しく生成するものがあれば、tlbimp.exeのより良い代替案を見つける場所でした。 – Alex

+1

あなたは常にロビーを使ってそのポリシーを変更することができます。プログラミングの変化の現実として、それに関する政策は適応しなければならない。実際には、企業ポリシーはここでは静的に使用されるかもしれません - 設計ガイドラインのような変更が容易な方が良いでしょう。たとえば、私のcomputerclubはStatueにMonthly Feeを持っていました。法律上の理由により公証人に変更が必要です。彼らは、 "正確な値は手数料シートを参照する"という彫像に1回変更を加えました。料金表がはるかに単純であるので、今や彼らはループ内にそれ以上の公証人がいなくても料金を変更することができます。 – Christopher

関連する問題