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
Delphi 注册同一ActiveX的不同版本_Delphi_Activex - Fatal编程技术网

Delphi 注册同一ActiveX的不同版本

Delphi 注册同一ActiveX的不同版本,delphi,activex,Delphi,Activex,就ActiveX控件的注册和引用而言,我一直在为ActiveX控件的最佳设计而苦苦挣扎 我们的软件的一部分基于Internet Explorer上使用的ActiveX控件,并由其GUID引用,ActiveX控件将连接到服务器并从中获取实时图像数据 我面临的问题是,每次更新服务器版本时,我们都必须更改ActiveX控件的版本,因为客户端通常有新的代码,因此,例如6.3版的ActiveX将无法连接到6.4服务器,必须进行更新 问题是,在机器上注册同一ActiveX的不同版本的最佳设计是什么?我是否应

就ActiveX控件的注册和引用而言,我一直在为ActiveX控件的最佳设计而苦苦挣扎

我们的软件的一部分基于Internet Explorer上使用的ActiveX控件,并由其GUID引用,ActiveX控件将连接到服务器并从中获取实时图像数据

我面临的问题是,每次更新服务器版本时,我们都必须更改ActiveX控件的版本,因为客户端通常有新的代码,因此,例如6.3版的ActiveX将无法连接到6.4服务器,必须进行更新

问题是,在机器上注册同一ActiveX的不同版本的最佳设计是什么?我是否应该在每个新版本中更改ActiveX的GUID


我对此进行了大量搜索,没有找到任何令人满意的结果,我也不能使用免费注册的COM,因为ActiveX控件要在Internet Explorer中使用

通常情况下,新版本的服务器支持旧版本的客户端。所以你不会经常强迫客户升级。在某些时候,你可能会选择断绝同胞关系。但是如果你不经常这样做的话,疼痛应该不会那么严重。即便如此,为什么用户需要安装多个版本的ActiveX?您正在破坏ActiveX的接口吗?不知道ActiveX的版本仍然支持以前版本的二进制API吗?如果没有,为什么不呢?David,这有点复杂,因为客户端ActiveX和桌面使用二进制专有协议与服务器进行通信,通常我们会在协议中添加新命令和新内容,因此作为一项规则,每个新版本都会破坏客户端和服务器的兼容性,因此客户端ActiveX或桌面必须始终处于同一版本,这将很难保持兼容性,因为当客户端需要从不同版本访问服务器时,我们会对其进行多个版本的更改,这对于桌面来说不是一个问题,但我发现在IEF中很难解决。您应该为新的协议命令定义新的ActiveX接口,同时保持与现有接口和现有命令的向后兼容性。这允许较旧的客户端继续使用较旧的版本,而实际上不需要安装多个版本,也不需要针对较新的服务器安装较旧的命令,并且较新的客户端可以使用较新的接口和较新的命令(如果有)。如果较新的客户端希望使用较新的接口,但未安装该接口,请退回到较旧的接口,或者操作失败并提示用户升级。除非每次都从根本上更改协议本身的结构,否则在添加新命令时无需断开向后兼容性。如果可能的话,设计协议,使服务器可以在连接或请求时报告其功能,以便客户端可以发现允许哪些命令。或者至少确保未知命令报告可预测的结果,以便与较旧服务器通信的较新客户端可以正常失败而不会中断。也许,您仍然可以使用免注册COM,并将ActiveX DLL与Delphi EXE并排放置。免费注册COM不是Internet Explorer特有的。这为VB6提供了一些示例,也许您可以在Delphi中尝试同样的方法。