安装组件时,您有时可能会遇到一些错误。
sgcWebSockets 使用 Delphi 附带的默认 Intraweb 版本编译。如果您未安装 Intraweb,可以修改位于 Source 文件夹中的 sgcVer.inc 文件。
搜索您的 Delphi 版本,并注释掉所有 Intraweb 的编译器定义(以 IW 开头)。示例:对于 Delphi 10.4,注释掉所有 Intraweb 的编译器定义
{$IFDEF VER340} { Delphi 10.4 }
{$DEFINE D2006}
{$DEFINE D2007}
{$DEFINE D2009}
{$DEFINE D2010}
{$DEFINE DXE}
{$DEFINE DXE2}
{$DEFINE DXE3}
{$DEFINE DXE4}
{$DEFINE DXE5}
{$DEFINE DXE6}
{$DEFINE DXE7}
{$DEFINE DXE8}
{$DEFINE D10}
{$DEFINE D10_1}
{$DEFINE D10_2}
{$DEFINE D10_3}
{$DEFINE D10_4}
{$DEFINE INDY10_1}
{$DEFINE INDY10_2}
{$DEFINE INDY10_5_5}
{$DEFINE INDY10_5_7}
{$DEFINE INDY10_5_8}
{$DEFINE INDY10_6}
{$DEFINE INDY10_6_0_5122}
{$DEFINE INDY10_6_0_5169}
{$DEFINE INDY10_6_2_5263}
{$DEFINE INDY10_6_2_5366}
{$DEFINE INDY10_6_2_D10_4}
{$IFNDEF BCB}
{$IFNDEF MACOS}
{$IFNDEF ANDROID}
{.$DEFINE IWIX}
{.$DEFINE IWXI}
{.$DEFINE IWXIV}
{.$DEFINE IWXV}
{$ENDIF}
{$ENDIF}
{$IFNDEF NEXTGEN}
{$DEFINE SGC_JSON_INTF}
{$ENDIF}
{$ENDIF}
{$ENDIF}
如果已安装 Intraweb 但其版本与 Delphi 默认附带的版本不同,您的 Intraweb 包可能具有不同的名称。此时请打开 sgcWebSockets 运行时包,并在项目源代码中更改 Intraweb 名称。

sgcWebSockets 需要 Indy 才能在您的 IDE 中安装组件。Trial 安装程序针对 Delphi / CBuilder 附带的 Indy 库编译,因此如果您收到如下消息:
[DCC Fatal Error] dclsgcWebSocketsDX.dpk(31): E2202 Required package 'IndyCore' not found
您很可能拥有较新版本的 Indy,因此要安装试用版,必须删除此版本并使用 Delphi / CBuilder 安装程序安装内置的 Indy 版本。
如果您拥有完整源代码,只需检查以下内容:
1. 所需的 Indy 包:IndyCore、IndySystem 和 IndyProtocols。如果您有较新的 Indy 版本,这些包的名称可能不同,请访问菜单 "Component / Install Packages",检查 Indy 包的名称,并在项目中相应修改。
2. sgcWebSockets 支持多个 Indy 版本,有编译器定义允许为每个 Indy 版本编译。打开位于源文件夹的 sgcVer.inc,根据您的 Indy 版本进行相应更改(是 IdVers.inc Indy 文件的 gsIdVersion)。部分编译器定义:
{$DEFINE INDY10_1}
{$DEFINE INDY10_2}
{$DEFINE INDY10_5_5}
{$DEFINE INDY10_5_7}
{$DEFINE INDY10_5_8}
{$DEFINE INDY10_6}
{$DEFINE INDY10_6_0_5122}
{$DEFINE INDY10_6_0_5169}
{$DEFINE INDY10_6_2_5263}
{$DEFINE INDY10_6_2_5366}
{$DEFINE INDY10_6_2_D10_4}
如果使用 CBuilder 编译项目时出现此错误,请在项目中设置以下选项:
Project > Options > C++ Linker
取消勾选"与动态 RTL 链接"
Project > Options > Packages > Runtime Packages
取消勾选"与运行时包链接"
编译 win64 运行时软件包时,必须同时编译 Release 和 Debug 版本。
sgcWebSockets Standard 和 Professional 对某些组件使用 Indy,而 Indy 不使用 ZLib 单元,而是使用自己的 ZLib 副本。项目同时链接到 ZLib 和 Indy ZLib 单元,因此编译时编译器不知道哪个是正确的引用。有两种解决方案:
1. 搜索包含 System.ZLib.hpp 链接的位置,并将其删除或移至 IdZLibHeaders.hpp 之后
2. 在项目选项中使用以下条件定义 NO_USING_NAMESPACE_SYSTEM_ZLIB 或 DELPHIHEADER_NO_IMPLICIT_NAMESPACE_USE,以避免使用 System.Zlib.hpp。
sgcWebSockets Enterprise 对部分组件使用自定义 Indy 版本,而 Indy 不使用 ZLib 单元,而是使用其自己的 ZLib 副本:sgcIdZLib、sgcIdZLibHeaders……项目链接了 ZLib 和 Indy ZLib 单元,因此编译时编译器无法确定正确的引用,因为名称相同。有两种解决方案:
1. 搜索包含 System.ZLib.hpp 链接的位置,并将其删除或移至 sgcIdZLibHeaders.hpp 之后。
2. 在项目选项中使用以下条件定义 NO_USING_NAMESPACE_SYSTEM_ZLIB 或 DELPHIHEADER_NO_IMPLICIT_NAMESPACE_USE,以避免使用 System.Zlib.hpp。
使用以下解决方法修复该错误:通过菜单"Project/Add to Project"将位于 dcp/android 默认文件夹中的 libsgcwebsocketsC*.a 文件添加到您的项目。
示例:对于 CBuilder 11,请将文件 "libsgcWebSocketsC11.a" 添加到您的项目中,该文件默认位于文件夹 "C:\Users\Public\Documents\
如果在 Lazarus 下安装组件时构建 IDE 的配置文件不是"Optimized IDE",则可能引发此错误。试用版是使用"Optimized IDE"配置文件编译的。
请尝试以下解决方法:从菜单选项中选择"运行 / 清理并重新构建"。