Niemożność kompilacji programu z modułem Crt

0

Pobrałem ten moduł: http://www.pp4s.co.uk/main/tu-delphi-crt.html

Zrobiłam jak na instrukcji, wypakowałem, skopiowałem do folderu z projektem, dodałem do projektu.
Niestety podczas kompilacji mam 3 błędy (nie użyłem jeszcze żadnej procedury z crt, tylko go dodałem do głównego programu w uses), a nie jestem na tyle zaawansowany żeby poprawiać takie funkcje :D

Może jakoś źle dodałem? Oto błędy:

[DCC Error] crt.pas(1222): E2010 Incompatible types: 'AnsiChar' and 'Char'
[DCC Error] crt.pas(1244): E2010 Incompatible types: 'AnsiChar' and 'Char'
[DCC Warning] crt.pas(1253): W1061 Narrowing given WideChar constant (#$FFFF) to AnsiChar lost information
[DCC Fatal Error] Projekt_2DRPG.dpr(10): F2063 Could not compile used unit 'crt.pas'

Po dodaniu pliku do projektu, embaracadero sam dodał odpowiednie instrukcje:

uses
  System.SysUtils,
  Windows,
  crt in 'crt.pas';

Dlaczego chcę używać crt? A no dlatego że ma ciekawe funkcje które chciał bym przetestować. Poza tym to zawsze nowa wiedza. Jeśli poradzę sobie z tym problemem to już na przyszłość może mi się to przyda do innych przypadków :D

1

Prawdopodobnie nie przeczytałeś o kompatybilności.
Podaj te wiersze to się wymyśli jak z tym walczyć.

2

Widać to stary unit, pisany pod Delphi w czasach gdy było char=ansichar. Obecnie char=widechar.
Zamień wszystkie wystąpienia "char" na "ansichar" w tym unicie i powinno pójść.

1
Azarien napisał(a):

Widać to stary unit, pisany pod Delphi w czasach gdy było char=ansichar. Obecnie char=widechar.
Zamień wszystkie wystąpienia "char" na "ansichar" w tym unicie i powinno pójść.

Jeden problem się rozwiązał gdy tak zrobiłem. W drugim nie wiem jak to zrobić :D

if (_ExtendedChar <> -1) then begin
    Result := Chr(_ExtendedChar);
    _ExtendedChar := -1;
    Exit;
  end; 
0

Przypadkowo napisałem posta będąc niezalogowanym i nie mogę go edytować. Problem występuje w drugiej linii podanego kodu (Result).
Kod całego unitu Crt:

http://4programmers.net/Pastebin/5069

Kod całej procedury z tym błędem:

function  ReadKey: AnsiChar;
var
  Input: INPUT_RECORD;
  NumRead: DWORD;
  K: PKBDCode;
  C: smallint;
begin
  if (_ExtendedChar <> -1) then begin
    Result := Chr(_ExtendedChar);           // <-- Tu jest ten błąd. ([DCC Error] crt.pas(1222): E2010 Incompatible types: 'AnsiChar' and 'Char')
    _ExtendedChar := -1;
    Exit;
  end;
  while (True) do begin
    if (ReadConsoleInput(_InputHandle, Input, 1, NumRead)) then begin
      if ((Input.EventType = KEY_EVENT) and (Input.Event.KeyEvent.bKeyDown)) then begin
        K := __LookupKey(Input.Event.KeyEvent.wVirtualKeyCode);
        if (K <> nil) then begin
          C := __TranslateKey(Input, K);
          if (C <> -1) then begin
            if (C and $0100 <> 0) then begin
{$IFNDEF NOCRTEXTENSIONS}
              _LastInput := Input;
{$ENDIF}
              _ExtendedChar := C and $00FF;
               Result := #0;
              Exit;
            end;
            if (C = 0) and (Input.Event.KeyEvent.AsciiChar <> #0) then
              Result := Input.Event.KeyEvent.AsciiChar
            else
              Result := ansichar(C);
{$IFNDEF NOCRTEXTENSIONS}
            _LastInput := Input;
{$ENDIF}
            Exit;
          end;
        end;
      end;
    end else begin
      Result := Chr(-1);
      Exit;
    end;
  end;
end;
 
0

Doskonała robota, działa :D
Byłem na podanej stronie i nie zauważyłem rozwiązania ;p
Niestety pojawił się kolejny problem - znak nowej linii.
Mianowicie, zamiast robić nową linię (writeln, readln), program wstawia jakieś kółko:

HrnMRxb.png

Powodem jest Crt, ale nie wiem jak go wyeliminować. Bez niego działa dobrze. Wystarczy że do uses dopisze Crt i od razu wstawia kółka. Są też inne znaki, np. coś jak nutka po wciśnięciu enteru.

3

A nie możesz ściągnąć Lazarusa (http://www.lazarus-ide.org/) i nie babrać się w tej kupie?

0
babubabu napisał(a):

A nie możesz ściągnąć Lazarusa (http://www.lazarus-ide.org/) i nie babrać się w tej kupie?

nie znam tego środowiska, muszę go obczaić.

1 użytkowników online, w tym zalogowanych: 0, gości: 1