正在设计一款电器,并希望支持零配置功能。这样,用户可以在网络上查找设备,只需双击图标即可访问Web界面,而无需进行配置或知道其IP地址。
尝试使用UPNPLib_TLB,但函数似乎是只读的,我是对的吗?我可以使用CoUPnPDevice.Create创建设备,但无法设置FriendlyName或URL。
尝试使用Deltics Bonjour服务,但它会在创建时崩溃(ACCESS_VIOLATION)。演示代码使用自定义测试单元,使实验复杂化。
经过大量研究,似乎没有可用于此的组件,我需要一些指针。有人是否成功地使用Delphi XE2/5通过UPnP或Bonjour创建了零配置广播?如果需要,我可以回到Delphi 7。目标=Windows 7。
注意:明确一点,我可以在网络上找到现有的设备,不想枚举现有的设备,但我想要的是广播我的服务,以使我的盒子就像网络打印机那样运行。唯一需要公开的服务是URL,以便用户可以访问嵌入式Web服务器。
感谢帮助!
编辑 根据提供的提示,我进行了一些研究,但用RAD方式完成这项工作是不可能的。
直接使用MS API很耗时,并且需要我不具备的C语言理解水平。将Delphi 5/Indy 7组件移植到XE2/5将需要大量的工作和调试。
我发现Intel现在开源了UPnP开发人员工具: Developer Tools for UPnP。这个工具可以用10-15行代码创建一个服务器。 Intel提供了一个DLL,我可以从VS Express中调用它,如下所示,效果很好:
device = UPnPDevice.CreateRootDevice();
device.FriendlyName = 'My name';
device.PresentationURL = 'URLToEmbeddedServer";
我尝试使用headconv7工具将Intel的UPNP.DLL文件转换为Pascal文件,从而直接从Delphi调用DLL中的外部函数,但是转换过程中出现了太多问题。
这很遗憾,因为Intel库使创建UPnP堆栈变得非常简单,这个方法非常适合作为组件实现,但目前使用.NET和VS Express更快地完成这项工作。