对于应用程序,我们使用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之后,我只获得了与以前相同的界面:/。我是在正确的道路上,我该怎么做?
答案 0 :(得分:2)
一旦你完成了midl + tlbimp,你就可以编写这种代码,因为tlbimp应该创建一个类(UPnPRegistrarClass)和一个底层COM类实现的接口IUPnPRegistrar:
IUPnPRegistrar registrar = (IUPnPRegistrar)new UPnPRegistrarClass();
registrar.RegisterDevice(
File.ReadAllText("DimmerDevice-Desc.xml"),
"My.Class",
"MyInitString",
"MyContainerId",
Path.GetFullPath("."),
3200);
注意:为此,请下载磁盘上的UPnP device registration sample,并将两个XML描述文件复制到当前执行路径。你还必须用progid实现一个COM对象(“My.Class”可以工作,因为RegisterDevice调用确实会实例化这个对象来构建一个标识符。你可以用.NET做到这一点。
此处提供了设备和服务说明格式:UPnP™ Device Architecture 1.1。在Windows世界中,此处指定了一些额外的限制:Creating a Device Description (Windows)