0

COM BITS APIに対して .NET コードを書いています。Windows キットの下にある bits.idl ファイルを見つけて実行すると、bits.tlb がmidl bits.idl得られました。次に、実行tlbimp bits.tlbして BackgroundCopyManager.dll を取得しました。

このアセンブリ (私の .net プロジェクトで参照) ではすべてが期待どおりであり、VS 2013 のオブジェクト ブラウザーに表示され、ildasm で適切に表示されますが、1 つの例外があります。BackgroundCopyManager 名前空間に新しい GUID タイプが追加されましたが、これは本当に必要ないと思います。

namespace BackgroundCopyManager
{
    public struct GUID
    {
        public uint Data1;
        public ushort Data2;
        public ushort Data3;
        public byte[] Data4;
    }
}

System.Guid は、.NET 側の GUID、CLSID、および IID 関連のすべてのニーズに十分対応できると考えていました。どうにかして余分なものを取り除くことはできますか?System.Guid とこの偽者の間のキャストは簡単ではなく、必要ないように思われます。

私が把握できる唯一のことは、これらのインターフェイスにはパラメーターの型として GUID を使用するメソッドがいくつかあるということです。この idl ファイルは 2000 年のものなので、.NET 相互運用機能はまだ機能していなかったと思います。

4

1 に答える 1

1

BITS の IDL に関する問題の表面をなぞっているだけです。不必要な GUID 型の宣言は小さな問題です。IDL は、オートメーションと互換性を持つように設計されたことはありません。重要な宣言用の cppquote() が多すぎ、LPWSTR などの互換性のない型が多すぎます。実際には C++ からのみ機能します。Tlbimp から取得した相互運用型を形にして、マネージ プログラムから使用できるようにするために必要な作業量は相当なものです。

ご想像のとおり、この作業は完了しています。私が知っている最良のものは、SharpBITS.NET ライブラリです。取得する最も簡単な方法は、 Nuget パッケージを取得することです。

于 2015-03-03T16:12:29.487 に答える