如何注册一个UPnP服务

3

我有一个Visual Studio 2008 C++项目,用于Windows Mobile 6 ARMV4I。我想要注册一个UPnP服务。

我正在使用Windows CE 6 SDK中的Microsoft示例作为UPnP服务的实现。WINCE600\PUBLIC\SERVERS\SDK\SAMPLES\UPNP\DEVICE

不幸的是,RegisterRunningDevice调用失败,并显示错误E_HANDLE。

#include "upnpdevice_i.c"
#import "upnpdevice.dll" named_guids

int main()
{
    ::CoInitializeEx( NULL, COINIT_MULTITHREADED );

    using namespace UPnPHostLib;
    IUPnPDeviceControlPtr device_ctrl( CLSID_Device );
    IUPnPRegistrarPtr registrar( CLSID_UPnPRegistrar );

    bstr_t device_descr = /* contents of the device.xml file from the sample */

    // throws a _com_error exception where hr = E_HANDLE
    bstr_t device_id = registrar->RegisterRunningDevice( device_descr, 
        device_ctrl, 
        L"foo", 
        L"/windows/upnp", 
        0 );

    /* ... */

    ::CoUninitialize();
    return 0;
}

在我的网络搜索中,我看到其他人提到过这个错误,但是没有找到任何结果。

  • 我已注册upnpdevice.dll。
  • 我已安装“可选的Windows Mobile服务器组件”upnpctrl、upnphost和httpd。
  • 可执行文件upnpdevice.dll、device.xml和service.xml均位于/windows/upnp目录下。

有人有什么建议吗?

1个回答

3
我已经解决了这个问题。问题在于可选的Windows Mobile服务器组件没有签名。当device.exe在启动时尝试将它们作为流驱动程序加载时,它们被拒绝了。-PaulH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接