Einzelnen Beitrag anzeigen

gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#1

Hilfe bei Delphi-CRT-Unit für XE/2

  Alt 21. Jan 2013, 12:06
Delphi-Version: XE2
Lieber XE/2-Benutzer,

ich würde mich über Mithilfe bei folgender Situation freuen:

Bei den Anpassungen von MPArith V1.24.23 für Delphi 17 / XE3 und Win64 mußte ich auch meine Delphi-CRT-Unit ändern. Leider ging das nur mit der Methode "Versuch und Irrtum" da selbst die relavanten Online-Hilfen vom Emba nur sagen, daß sie keine Information über das haben, was sie da programmiert haben: zB http://docwiki.embarcadero.com/Libra...xtRec.CodePage oder http://docwiki.embarcadero.com/Libra...Rec.MBCSLength. Zitat: "Embarcadero Technologies does not currently have any additional information. Please help us document this topic by using the Discussion page!"

Ist schon merkwürdig, daß sie User um Hilfe für Ihre Dokumentation bitten, es muß doch Specs und Programmierer dafür geben!

Hier die relevanten Abschnitte in CRT.PAS, fraglich sind die Teile mit {$ifdef TXTREC_CP}:
Delphi-Quellcode:
{$IFDEF CONDITIONALEXPRESSIONS}
  {$IF CompilerVersion >= 23.0}  {D16(XE2)+}
    {$DEFINE UNIT_SCOPE}
  {$IFEND}
  {$IF CompilerVersion >= 23.0}
    {$DEFINE TXTREC_CP}
  {$IFEND}
{$ENDIF}
//..
     fmInOut,
     fmOutput: begin
               OutputHandle := CreateFile('CONOUT$', GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
               {$ifdef D6PLUS}
                 {Delphi 6 and above default to LF-only line breaks}
                 f.Mode := fmClosed;
                 SetLineBreakStyle(text(f), tlbsCRLF);
               {$endif}
               f.Handle := OutputHandle;
               f.Mode := fmOutput;
               if f.BufPtr=nil then begin
                 f.BufPtr := @f.Buffer;
                 f.BufSize := sizeof(f.Buffer)
               end;
               InitVideo;
               if (GetConsoleScreenBufferInfo(f.Handle, Info)) then begin
                 SetConsoleMode(f.Handle, 0);
                 f.InOutFunc := @CrtOutput;
                 f.FlushFunc := @CrtOutput;
                 f.CloseFunc := @CrtClose;
                 {$ifdef TXTREC_CP}
                   if f.CodePage = 0 then begin
                     if GetFileType(f.Handle) = FILE_TYPE_CHAR then begin
                       {f.Mode=fmOutput}
                       f.CodePage := GetConsoleOutputCP
                     end
                     else f.CodePage := DefaultSystemCodePage;
                   end;
                   f.MBCSLength := 0;
                   f.MBCSBufPos := 0;
                 {$endif}
               end
               else begin
                 Result := GetLastError;
               end;
             end;
//..
Nun ja, für XE3 läuft es jetzt. Allerdings habe ich keinen Zugang zu XE/XE2. Lauft Dokwiki gibt's die CodePage/MBCS-Felder bei XE noch nicht, aber bei XE2 schon. Wenn also jemand verifizieren könnte, ob das die alte Borland CRTDemo.pas aus dem CRT-Archiv als Konsol-Applikation unter XE / XE2 lauft, wäre ich sehr dankbar. (EXE kann ich ja leider nicht erstellen/anhängen)

Gruß und Dank im Voraus
Gammatester
  Mit Zitat antworten Zitat