安装错误

安装组件时,您有时可能会遇到一些错误。

 

找不到 Intraweb 包

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 名称

 

 

 

未找到 Indy 包

 

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}

 

c00000005 ACCESS_VIOLATION 在 CBuilder 中

如果使用 CBuilder 编译项目时出现此错误,请在项目中设置以下选项:

 

Project > Options > C++ Linker

取消勾选"与动态 RTL 链接"

 

Project > Options > Packages > Runtime Packages

取消勾选"与运行时包链接"

 

 

在 CBuilder Win64 中找不到包导入:sgcWebSocketsCXXX.bpi

编译 win64 运行时软件包时,必须同时编译 Release 和 Debug 版本。

 

 

System.ZLib.hpp 和 IdZLib.hpp 引用不明确 CBuilder

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。

 

 

歧义引用 System.ZLib.hpp 和 sgcIdZLib.hpp CBuilder

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。

 

CBuilder 和 Android 上出现 Sgcwebsocket... 的 vTable 未定义引用

使用以下解决方法修复该错误:通过菜单"Project/Add to Project"将位于 dcp/android 默认文件夹中的 libsgcwebsocketsC*.a 文件添加到您的项目。

示例:对于 CBuilder 11,请将文件 "libsgcWebSocketsC11.a" 添加到您的项目中,该文件默认位于文件夹 "C:\Users\Public\Documents\Embarcadero\Studio\22.0\DCP\Android\Release"。

 

 

在 Lazarus 下校验和发生变化

如果在 Lazarus 下安装组件时构建 IDE 的配置文件不是"Optimized IDE",则可能引发此错误。试用版是使用"Optimized IDE"配置文件编译的。

 

找不到 Y 使用的 X,ppu 不兼容

请尝试以下解决方法:从菜单选项中选择"运行 / 清理并重新构建"。