可以用Delphi XE5创建一个zeroconf服务吗?

时间:2014-04-18 19:03:52

标签: delphi bonjour upnp

使用设备并希望支持零配置功能。这样,用户可以在网络上查找设备,只需双击图标即可访问Web界面,而无需对其进行配置或了解其IP地址。

尝试使用UPNPLib_TLB,但函数似乎是只读的;我对吗?我可以使用CoUPnPDevice.Create创建设备,但无法设置FriendlyName或URL。

尝试使用Deltics Bonjour service但它在create(ACCESS_VIOLATION)上崩溃了。演示代码使用自定义测试单元,这使得实验变得复杂。

经过大量研究后,它看起来并不像有一个可用的组件,并会欣赏一些指示。有没有人通过UPnP或Bonjour用Delphi XE2 / 5成功创建了zeroconf广播。如果需要,我可以回到Delphi 7。目标= Windows 7。

注意:要清楚,我可以在网络上找到现有设备,并且不想枚举现有设备,但我想要的是广播我的服务,以便我的盒子就像网络打印机一样。我需要公开的唯一服务是URL,以便用户可以访问嵌入式Web服务器。

感谢帮助!

修改 通过提供的提示,我做了一些研究,并且通过RAD方式完成这项工作是不可能的。

直接使用MS API非常耗时,并且需要对我不具备的C语言有一定程度的了解。将Delphi 5 / Indy 7组件移植到XE2 / 5将需要大量的工作和调试。

我发现英特尔的UPnP开发人员工具现已开源:Developer Tools for UPnP。这个工具使得用10-15行代码创建服务器变得非常简单。英特尔提供了一个我可以从VS Express调用的DLL,如下所示,它运行良好:

device = UPnPDevice.CreateRootDevice();
device.FriendlyName = 'My name';
device.PresentationURL = 'URLToEmbeddedServer";

...

我尝试使用headconv7工具将.h文件英特尔的UPNP.DLL转换为pascal文件,并直接从Delphi调用DLL中的外部函数,但转换过程存在太多问题。

这太糟糕了,因为英特尔库使得创建UPnP堆栈变得非常简单,并且该方法非常适用于组件,但现在它更快地使用.NET和VS Express来完成工作

1 个答案:

答案 0 :(得分:1)

使用UPNPLib_TLB时,不应直接创建UPnPDevice对象。 UPnpDevice描述了网络上的已知设备,这就是其属性为只读的原因。

阅读文档:

Control Point API

Finding Devices

您应该创建UPnPDeviceFinder类的实例。它的搜索方法会为找到的每个设备提供一个UPnDevice对象。