【问题标题】:Compiling GMLib 1.1.0 in XE5在 XE5 中编译 GMLib 1.1.0
【发布时间】:2014-03-01 21:12:53
【问题描述】:

我设法解决了几个问题并安装了“GMLib_DXE4.bpl”。

现在我在编译“GMLib_DXE4_VCL.bpl”时遇到了两个问题。

[dcc32 错误] GMMapVCL.pas(124): E2003 未声明的标识符:'TTimer'

[dcc32 Error] WebControlVCL.pas(180): E2029 Identifier expected but 'IMPLEMENTATION' found : Solved.

关于TTimer:

    uses
  {$IFDEF WEBBROWSER}
  SHDocVw,
    {$IFDEF DELPHIXE2}
    Vcl.ExtCtrls,
    {$ELSE}
    ExtCtrls,
    {$ENDIF}
  {$ENDIF}

  {$IFDEF CHROMIUM}
  cefvcl, ceflib, cefgui,
  {$ENDIF}

  {$IFDEF DELPHIXE2}
  System.SysUtils, System.Classes, Vcl.Dialogs, Vcl.Graphics,
  {$ELSE}
  SysUtils, Classes, Dialogs, Graphics,
  {$ENDIF}

  GMMap, GMFunctionsVCL;

关于实施:已解决。

    unit WebControlVCL;

    {.$DEFINE WEBBROWSER}
    {.$DEFINE CHROMIUM}
    {$I ..\gmlib.inc}

    interface

    uses
      {$IFDEF WEBBROWSER}
      MSHTML, SHDocVw,
      {$ENDIF}

      {$IFDEF CHROMIUM}
      ceflib, cefvcl,
      {$ENDIF}

      {$IFDEF DELPHIXE2}
      System.SysUtils,
      {$ELSE}
      SysUtils,
      {$ENDIF}

      WebControl;

    type
       -------------------------------------------------------------------------------}
      {$IFDEF WEBBROWSER}
      TWebControl = class(TCustomWeb)
      protected    
        function WebFormGet(const FormNumber: Integer): IHTMLFormElement;
        function WebFormFieldValue(const FormIdx: Integer; const FieldName: string): string; overload; override;
      public
         constructor Create(WebBrowser: TWebBrowser); reintroduce; virtual;
         .....
      end;
      {$ENDIF}

      {$IFDEF CHROMIUM}
      TWebChromium = class(TCustomWebChromium)
      protected
        function WebFormFieldValue(const FormIdx: Integer; const FieldName: string): string; overload; override;
      public
        constructor Create(WebBrowser: TChromium); reintroduce; virtual;
        .....
      end;
      {$ENDIF}

implementation

    uses
      {$IFDEF WEBBROWSER}
        {$IFDEF DELPHIXE2}
        Winapi.ActiveX, System.Types, Vcl.Graphics, Vcl.Forms, System.StrUtils,
        {$ELSE}
        ActiveX, Types, Graphics, Forms, StrUtils,
        {$ENDIF}
      {$ENDIF}

      {$IFDEF DELPHIXE2}
      Vcl.Imaging.jpeg, System.DateUtils;
      {$ELSE}
      jpeg, DateUtils;
      {$ENDIF}

    { TWebControl }

    {$IFDEF WEBBROWSER}
    constructor TWebControl.Create(WebBrowser: TWebBrowser);
    begin
      inherited Create(WebBrowser);
    end;

【问题讨论】:

  • 当未定义 WEBBROWSER 和 CHROMIUM 时,您会得到一个空类型部分,后跟关键字实现,因此会出现第二条错误消息。你最好在两个 $IFDEF 中都包含 type 关键字。
  • 虽然 Toon Krijthe 是对的,但 GMLib 至少需要一个浏览器才能运行。如果你没有定义任何,GMLib 就不能工作(此时只能与 TWebBrowser 一起工作)。您在 SNV 存储库中有 XE5 版本
  • 谢谢 Cadetill。像往常一样,它奏效了。我要删除主题吗?
  • 别担心,Vladds 没有必要 ;-)

标签: delphi delphi-xe5 gmlib


【解决方案1】:

您使用的是过期版本的 GMLib。作为一般规则,永远不要下载开源项目的预打包版本。开发人员有一种习惯,不会像您希望的那样频繁地更新这些预打包的下载。

相反,请始终访问修订控制存储库以获取最新版本。在这种情况下,它在这里:https://code.google.com/p/gmlibrary/source 并且似乎已经更新为支持 XE5。

FWIW 几乎可以肯定,您的问题可以通过对包含文件 gmlib.inc 的简单修改来解决。该文件需要了解新版本。查看该文件最新版本的差异:https://code.google.com/p/gmlibrary/source/diff?spec=svn142&r=127&format=side&path=/trunk/gmlib.inc&old_path=/trunk/gmlib.inc&old=116

如您所见,只需遵循为其他版本建立的模式并为 XE5 添加定义。

【讨论】:

  • 我不太习惯SVN。这就是我尝试编译官方 XE4 项目的原因。
  • 我明白了。我去过那儿。 ZIP 文件总是很诱人。但是你应该学会休息。好东西总是在回购!
猜你喜欢
  • 1970-01-01
  • 2017-01-31
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 2016-07-11
  • 1970-01-01
  • 1970-01-01
  • 2019-11-12
相关资源
最近更新 更多