Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 如何使用IUPnPRegistrar::GetUniqueDeviceName?_Windows_Delphi_Upnp - Fatal编程技术网

Windows 如何使用IUPnPRegistrar::GetUniqueDeviceName?

Windows 如何使用IUPnPRegistrar::GetUniqueDeviceName?,windows,delphi,upnp,Windows,Delphi,Upnp,我正在测试upnpapi。有一个方法:IUPnPRegistrar::GetUniqueDeviceName。我如何使用它来获得唯一的设备名称。以下是该方法的参数: HRESULT GetUniqueDeviceName( [in] BSTR bstrDeviceIdentifier, [in] BSTR bstrTemplateUDN, [out] BSTR *pbstrUDN ); 在我的主机中,有一个媒体播放器设备: IsRootDevice=-1 UniqueDe

我正在测试upnpapi。有一个方法:IUPnPRegistrar::GetUniqueDeviceName。我如何使用它来获得唯一的设备名称。以下是该方法的参数:

HRESULT GetUniqueDeviceName(
  [in]   BSTR bstrDeviceIdentifier,
  [in]   BSTR bstrTemplateUDN,
  [out]  BSTR *pbstrUDN
);
在我的主机中,有一个媒体播放器设备:

IsRootDevice=-1
UniqueDeviceName=uuid:a0a07e13-cc50-4db0-97b3-2a4b93ef0736
FriendlyName=VISITOR
type_=urn:schemas-upnp-org:device:MediaRenderer:1
PresentationURL=
ManufacturerName=Microsoft Corporation
ManufacturerURL=http://www.microsoft.com/
ModelName=Windows Media Player
ModelNumber=12
Description=Windows Media Player Renderer
ModelURL=http://go.microsoft.com/fwlink/?LinkId=105927
UPC=
SerialNumber={DCD14EBE-CEAE-421F-87DE-2C10780E99E2}
Service=urn:upnp-org:serviceId:RenderingControl
ServiceTypeIdentifier=urn:schemas-upnp-org:service:RenderingControl:1

我假设我的设备的唯一设备名是“uuid:a0a07e13-cc50-4db0-97b3-2A4 B93EF0736”。为了检索方法中的第三个值,我应该向第一个和第二个参数传递什么值?

GetUniqueDeviceName只是Win32 C API调用的包装。其中明确指出pszTemplateUDN(即GetUniqueDeviceName中的bstrTemplateUDN)可能为NULL,在这种情况下,您将返回根设备的UDN。我个人不明白微软所说的“设备描述模板”是什么意思。更好的说法是,我知道UPnP中的设备描述模板是什么意思,但它不包含任何特定的UDN。这是一个模板,对吗?因此,可能只是在系统重新启动过程中需要保留的结构的一个令人困惑的名称。这是UPnP所要求的,但Windows upnphost不适合您

所以要回答你的问题:

  • 您应该从RegisterDevice获得的strDeviceIdentifier
  • bstrTemplateUDN只要测试设备中没有嵌入式设备,就可以安全地使用NULL(我仍然需要看到这样的设备)
  • pbstrUDN是为指定设备返回的UDN
免责声明:我不知道upnphost也不知道iupnpregistrar,我只是碰巧有一些UPnP和Win32 API的背景知识,所以知道在哪里挖掘信息