2014-02-05 63 views
1

我設法解決了幾個問題並安裝了「GMLib_DXE4.bpl」。在XE5中編譯GMLib 1.1.0

現在我有兩個編譯「GMLib_DXE4_VCL.bpl」的問題。

[dcc32錯誤] GMMapVCL.pas(124):E2003未聲明的標識符: 'TTimer'

[dcc32錯誤] WebControlVCL.pas(180):E2029標識符預期,但 '執行' 實測值:解決。

關於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; 
+1

未定義WEBBROWSER和CHROMIUM時,會得到一個空類型部分,後跟關鍵字實現部分,因此會出現第二條錯誤消息。你最好在兩個$ IFDEF中包含type關鍵字。 –

+0

謝謝。工作。 – Vladds7

+1

雖然Toon Krijthe是對的,但GMLib至少需要一個瀏覽器才能運行。如果您沒有定義任何內容,GMLib將無法工作(此時僅適用於TWebBrowser)。你有一個XE5版本進入SNV倉庫 – cadetill

回答

1

您正在使用過時的GMLib版本。作爲一般規則,切勿下載開源項目的預打包版本。開發人員有一種習慣,就是不要隨意更新這些預先打包的下載文件。

而是始終轉到修訂控制存儲庫以獲取最新版本。在這種情況下,它在這裏:https://code.google.com/p/gmlibrary/source並且看起來已經更新以支持XE5。

FWIW您的問題幾乎可以肯定已通過對include文件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添加定義。

+0

我沒有如此使用SVN。這就是爲什麼我試圖編譯官方XE4項目。 – Vladds7

+1

我明白了。我去過那兒。 ZIP文件總是很誘人。但你應該學會重新安排。好東西總是在回購中! –