Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi XE2 und dxgettext / gnugettext.pas (https://www.delphipraxis.net/162828-xe2-und-dxgettext-gnugettext-pas.html)

Bbommel 6. Sep 2011 15:49

XE2 und dxgettext / gnugettext.pas
 
(Hinweis: die Frage habe ich so ähnlich auch schon auf der englischen dxgettext-Mailingliste gestellt, vielleicht lässt sich aber hier schneller eine Lösung finden, weil schon mehr Leute mit XE2 rumgetestet haben. Daher hoffe ich, dass der Crosspost ok ist)

Hallo zusammen,

beim Testen mit der Trial-Version von XE2 bin ich über ein Problem beim Komplieren der Datei gnugettext.pas gestolpert, also der Datei des Übersetzungstools GNU Gettext für Delphi.

Hier mal der Ausschnitt aus der Datei, der vielleicht für die Fehlersuche reichen müsste:

Delphi-Quellcode:
type
  PStrData = ^TStrData;
  TStrData = record
    Ident: Integer;
    Str: String;
  end;

function SysUtilsEnumStringModules(Instance: Longint; Data: Pointer): Boolean;
{$IFDEF MSWINDOWS}
var
  Buffer: array [0..1023] of Char; // WideChar in Delphi 2008, AnsiChar before that
begin
  with PStrData(Data)^ do begin
    SetString(Str, Buffer,
      LoadString(Instance, Ident, @Buffer[0], sizeof(Buffer)));
    Result := Str = '';
  end;
end;
{$ENDIF}
{$IFDEF LINUX}
var
  rs:TResStringRec;
  Module:HModule;
begin
  Module:=Instance;
  rs.Module:=@Module;
  with PStrData(Data)^ do begin
    rs.Identifier:=Ident;
    Str:=System.LoadResString(@rs);
    Result:=Str='';
  end;
end;
{$ENDIF}

function SysUtilsFindStringResource(Ident: Integer): string;
var
  StrData: TStrData;
begin
  StrData.Ident := Ident;
  StrData.Str := '';
  EnumResourceModules(SysUtilsEnumStringModules, @StrData);
  Result := StrData.Str;
end;
Der Fehler tritt dann bei vorvorletzten Zeile auf, also bei
Delphi-Quellcode:
EnumResourceModules(SysUtilsEnumStringModules, @StrData);
. Hier gibt es dann den Klassiker: "[DCC Fehler] gnugettext.pas(925): E2250 Es gibt keine überladene Version von 'EnumResourceModules', die man mit diesen Argumenten aufrufen kann"

Hat irgendwer eine Idee? EnumResourceModules ist aus der system.pas, aber die ist natürlich bei der Trial-Version nicht im Quelltext dabei, so dass ich nicht alte und neue Version vergleichen kann.

Bis denn
Bommel

Klaus01 6. Sep 2011 15:56

AW: XE2 und dxgettext / gnugettext.pas
 
Hallo,

wenn Du mit der Maus über EnumResourceModules fährst/bzw den Mauspointer darauf liegen lässt,
erscheint dann nicht ein Fenster mit den Parametern welche die Procedure/Function erwartet?

Grüße
Klaus

Bbommel 6. Sep 2011 16:01

AW: XE2 und dxgettext / gnugettext.pas
 
Doch klar, hätte ich gleich dazu schreiben sollen, sorry:

Code:
System.EnumResourceModules(TEnumModuleFuncLW,Pointer) Methode

Deklariert in System

Parameter

Func
   System.EnumResourceModules.TEnumModuleFuncLW
Data
  System.Pointer
Ich nehme an, dass das Problem ist, dass die als Parameter erwartete Funktion und die tatsächlich übergebene nicht übereinstimmen. Übergeben wird ja "SysUtilsEnumStringModules" (Deklaration habe ich ja oben extra mit aufgenommen) und erwartet wird eine Funktion vom Typ System.EnumResourceModules.TEnumModuleFuncLW. Und wie eben dieses TEnumModuleFuncLW kann ich in der system.pas ja nicht nachgucken. Offenbar aber anders als bisher oder bin ich auf einem Irrweg?

Klaus01 6. Sep 2011 20:01

AW: XE2 und dxgettext / gnugettext.pas
 
Guten Abend,

kompilierst Du für die 64bit Platform -> da haben sich meines Wissens u.a. die Pointergrößen
verändert.

Wenn Du das für die 32bit Platform kompilierst sollten eingentlich keine Unterschiede von Typgrößen
vorhanden sein.

Grüße
Klaus

daywalker9 6. Sep 2011 20:36

AW: XE2 und dxgettext / gnugettext.pas
 
Delphi-Quellcode:
function SysUtilsEnumStringModules(Instance: Longint; Data: Pointer): Boolean;

Longint muss hier NativeInt sein.

Bbommel 7. Sep 2011 10:44

AW: XE2 und dxgettext / gnugettext.pas
 
NativeInt hat wunderbar geholfen, vielen Dank.

v2afrank 7. Sep 2011 12:24

AW: XE2 und dxgettext / gnugettext.pas
 
Kannst Du die ganze Datei einmal hier hochschieben ? Heute ist meine Bestellung für XE 2 raus und dxgettext verwendi ich auch viel

Bbommel 7. Sep 2011 12:50

AW: XE2 und dxgettext / gnugettext.pas
 
Liste der Anhänge anzeigen (Anzahl: 1)
Klar... diese Version hier habe ich auch an Lars geschickt, so dass er sie hoffentlich veröffentlicht. Sie sollte wieder unter allen Delphi-Versionen laufen. Getestet habe ich mit D2009 und XE2.

DerDan 16. Nov 2011 09:29

AW: XE2 und dxgettext / gnugettext.pas
 
Hallo,

Vorübersetzte Strings für die Delphi Runtime Library gibt es auf der dxgettext Seite nur bis Delphi 2006!
siehe http://dybdahl.dk/dxgettext/translations/
Gibt es dafür einen Grund oder gibt es eine andere Quelle?

Ich bin grade das erste mal dabei ein Projekt für mehrer Sprachen zu erstellen.
Da ist bei Delphi2010 dxgettext doch okay oder gibt es was besseres?

mfg

DerDan

jaenicke 16. Nov 2011 09:52

AW: XE2 und dxgettext / gnugettext.pas
 
Du kannst vieles benutzen, auch die interne Lösung von Delphi (Projekt --> Sprachen).

daywalker9 16. Nov 2011 10:55

AW: XE2 und dxgettext / gnugettext.pas
 
Zitat:

Zitat von jaenicke (Beitrag 1136448)
Du kannst vieles benutzen, auch die interne Lösung von Delphi (Projekt --> Sprachen).

Taugt das was? Ich habs bisher noch nie ausprobiert.

DerDan 16. Nov 2011 10:56

AW: XE2 und dxgettext / gnugettext.pas
 
Hallo,


und was wird allgmein so empfohlen?
Eine Randbedingung ist übrigens, dass mein Auftraggeber die Texte später selber übersetzt oder übersetzten lässt.

mfg

DerDan

wicht 16. Nov 2011 11:30

AW: XE2 und dxgettext / gnugettext.pas
 
Werfe hier wieder mal Lingus in den Raum, ist am Ende für den Kunden auch einfach zu benutzen und komfortabel, siehe hier.

DerDan 16. Nov 2011 12:33

AW: XE2 und dxgettext / gnugettext.pas
 
Hallo wicht,

das von dir vorgeschlagene tool ist sicher interessant,
allerding ist mein Projekt als C++ VCL Anwendung angelegt.
Laut Lingus HP werden aber nur Pascal Dateinen gelesen

mfg

DerDan

wicht 16. Nov 2011 13:59

AW: XE2 und dxgettext / gnugettext.pas
 
Jau, dann wird das wohl nichts, ohne eine neue Ableitung der Parser-Basisklasse zu schreiben, die damit klarkommt (sollte nicht so schwierig sein, aber...). Sorry.

jaenicke 16. Nov 2011 17:02

AW: XE2 und dxgettext / gnugettext.pas
 
Zitat:

Zitat von daywalker9 (Beitrag 1136459)
Taugt das was? Ich habs bisher noch nie ausprobiert.

Ja, aber es bietet nicht so viele Möglichkeiten wie andere Tools. Dafür ist es in Delphi integriert und bietet zusätzlich einen externen Editor an, so dass man auch ohne Delphi übersetzen kann.

onno onzin 27. Mär 2012 14:59

AW: XE2 und dxgettext / gnugettext.pas
 
64 bits compiler von XE2 gibt mir ein Error:

gnugettext.pas(2709): E2064 Left side cannot be assigned to

Hat jemand eine Lösung dafür?

mkinzler 27. Mär 2012 15:09

AW: XE2 und dxgettext / gnugettext.pas
 
Was steht in der Zeile?

jaenicke 27. Mär 2012 15:14

AW: XE2 und dxgettext / gnugettext.pas
 
In der wohl aktuellsten Version:
Delphi-Quellcode:
          break;
Insofern ist die Frage welche das ist (und natürlich was da steht, ja).

onno onzin 27. Mär 2012 15:16

AW: XE2 und dxgettext / gnugettext.pas
 
die Procedure ist:

procedure THook.Reset(FollowJump: boolean);


if FollowJump and (Word(OldProc^) = $25FF) then begin
// This finds the correct procedure if a virtual jump has been inserted
// at the procedure address
Inc(Integer(patchPosition), 2); // skip the jump <<<<<<<<<<<<< Problem
patchPosition := pansiChar(Pointer(pointer(patchPosition)^)^);
end;

jaenicke 27. Mär 2012 15:49

AW: XE2 und dxgettext / gnugettext.pas
 
Also wenn ich den Ausschnitt so sehe, bezweifle ich, dass das unter 64-Bit so überhaupt funktioniert ohne "ein wenig" umgeschrieben zu werden. :zwinker:


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz