2

アプリケーションの場合、UPnPを使用してデバイス/サービスを検出および登録します(サーバーとクライアントの部分があります)。

発見には、非常にうまく機能したhttp://managedupnp.codeplex.com/を使用しました。

登録するために、いくつかのライブラリを見つけましたが、それらは非常にバグがあり(Intelオープンソースライブラリ)、COMコンポーネントを使用して小さなc#抽象化を作成したいと思います。

http://msdn.microsoft.com/en-us/library/windows/desktop/aa381805(v=vs.85).aspxというドキュメントを見つけ ましたが、問題が発生しました。

このライブラリにはインターフェイスのみが含まれており、そのインスタンスを取得する方法がわかりません。そして、私は例/ドキュメントを見つけることができません。

それで、誰かがこのCOMコンポーネントにデバイス/サービスを登録する方法を知っていますか?

ありがとうございました!

編集

C#dllを生成しようとしました:

midl /target NT51 /tlb "C:\upnphost.tlb" "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include\upnphost.idl"
tlbimp upnphost.tlb

しかし、この生成されたdllをインポートした後、以前と同じインターフェイスしか取得できませんでした:/。私は正しい方向に進んでいますが、どうすればよいですか?

4

1 に答える 1

2

midl + tlbimpを実行したら、この種のコードを記述できます。tlbimpは、基礎となるCOMクラスが実装するクラス(UPnPRegistrarClass)とインターフェイスIUPnPRegistrarを作成する必要があるためです。

IUPnPRegistrar registrar = (IUPnPRegistrar)new UPnPRegistrarClass();
registrar.RegisterDevice(
    File.ReadAllText("DimmerDevice-Desc.xml"),
    "My.Class",
    "MyInitString",
    "MyContainerId",
    Path.GetFullPath("."),
    3200);

注:これを機能させるには、ディスクにUPnPデバイス登録サンプルをダウンロードし、2つのXML記述ファイルを現在の実行パスにコピーします。また、progid(RegisterDevice呼び出しが実際にこのオブジェクトをインスタンス化して識別子を作成するために機能する "My.Class")を使用してCOMオブジェクトを実装する必要があります。これは.NETで実行できます。

デバイスとサービスの説明形式は、 UPnP™デバイスアーキテクチャ1.1で入手できます。Windowsの世界では、ここで指定されているいくつかの追加の制限があります。デバイスの説明の作成(Windows)

于 2013-02-05T13:02:36.423 に答える