Entwickler-Ecke

Andere .NET-Sprachen - Probs mit SysUtils


N3M081 - Mi 16.03.05 00:04
Titel: Probs mit SysUtils
Hi,

hab grad angefangen mit Delphi und stehe nun vor einem Problem.
Wollt was ganz einfaches machen und prompt kommen Fehler, vielleicht kann mir einer von Euch helfen.

Der Code:

Delphi-Quelltext
1:
2:
3:
4:
procedure TWinForm.Button1_Click(sender: System.Object; e: System.EventArgs);
begin
  TextBox4.Text:=IntToStr(StrToInt(TextBox1.Text) + StrToInt(TextBox2.Text));
end;


und die Fehlermeldung:
Fehlermeldung hat folgendes geschrieben:
[Error] WinForm.pas(182): E2003 Undeclared identifier: 'IntToStr'
[Fatal Error] Project1.dpr(15): F2063 Could not compile used unit 'WinForm.pas'


unter uses hab ich die sysutils eingebunden und trotzdem die Fehler!

Gruß N3M0

Moderiert von user profile iconTino: Code- durch Delphi- & Quote-Tags ersetzt.
Moderiert von user profile iconMotzi: Topic aus Sonstiges verschoben am Mi 16.03.2005 um 00:58


delfiphan - Mi 16.03.05 01:38

Kenn mich leider überhaupt nicht aus mit .NET.
Wenn du bei new Projects VCL Forms Application wählst, solltest du inttostr und strtoint benützen können. Bei einer Windows Forms Application kommst du wahrscheinlich nicht drum herum, sowas wie Button1.Text := System.&String.Format('{0}',[i]); zu schreiben. Aber wie gesagt, I don't really know...

Edit: :welcome:


wdbee - Mi 16.03.05 08:48

Unter .NET läuft das anders. Schau mal da: http://www.dsdt.info/referenz/vcl_fcl/konvertierung.php


AndyB - Mi 16.03.05 15:09

Wenn man die Unit SysUtils einbindet, geht es auch auf die Pascal'sche Art.
Nur ist die jetzt mit Borland.VCL.SysUtils in der uses-Annweisung anzugeben. (Oder man setzt die Unit-Default-Namespace Projekt-Option)


chrisdrury - Do 17.03.05 09:44

Jo, so ein ähnliches Problem habe ich auch, allerdings mit Delphi 5:

Bisher aufgefallen ist mir das bei den Funktionen Copy und
DeleteFile.
Wenn ich die einsetze, meckert der Compiler immer, das etwas nicht stimmt, z. B.:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
procedure TEditForm.XmlParse;
VAR
  Filename : STRING;
  f        : TEXTFILE;
BEGIN
  Filename := ExtractFilePath (Application.ExeName)+'Contents.txt';
  AssignFile (f, Filename);
  TRY
    Rewrite (f);
    TRY
      XmlParser.StartScan;
      XmlParser.Normalize := FALSE;
      WHILE XmlParser.Scan DO
        IF (XmlParser.CurPartType = ptContent) OR
           (XmlParser.CurPartType = ptCData) THEN
          Write (f, XmlParser.CurContent);
    FINALLY
      CloseFile (f);
    END;

    XMLRichEdit.PlainText := TRUE;
    XMLRichEdit.Lines.LoadFromFile (Filename);
  EXCEPT
    XMLRichEdit.Lines.Clear;
  END;
  SysUtils.DeleteFile(filename);
END;


Entscheidend ist hier die letzte Zeile:
Wenn ich nur DeleteFile(filename) einsetze, meldet sich der
Compiler mit folgender Fehlermeldung:
Inkompatible Typen: 'String' und 'PChar'!

Achja, natürlich steht SysUtils in der Uses-Anweisung.


maximus - Do 17.03.05 12:51

[OT]
@chrisdrury: Wenn du dir keine feinde machen willst, dann solltest du unbedingt die schlüsselwörter klein schreiben. Der code sieht grausam aus. Man hat das früher so gemacht, weil es noch keine syntax-highlighter gab.
[/OT]


AndyB - Do 17.03.05 14:05

user profile iconchrisdrury hat folgendes geschrieben:
Wenn ich nur DeleteFile(filename) einsetze, meldet sich der
Compiler mit folgender Fehlermeldung:
Inkompatible Typen: 'String' und 'PChar'!

Du hast da wohl "SysUtils, ..., Windows, ..." stehen.
Und nicht "Windows, SysUtils, ...".
Dadurch findet der Compiler, weil Windows.pas als letztes eingebunden wird, die Funktionen in Windows.pas und nimmt diese anstatt denen aus SysUtils.
Wenn du die uses-Reihenfolge nicht ändern kannst, aus welchen Gründen auch immer, dann muss du eben den "full qualified name" angeben:

Delphi-Quelltext
1:
2:
SysUtils.DeleteFile(MyFile);
SysUtils.CloseFile(f);


chrisdrury - Mo 21.03.05 08:33

@ maximus:
Hab den Code so übernommen, per copy and paste, hatte nur noch keine Muße, ihn zu ändern.
Normalerweise schreibe ich so auch nicht! :wink:

@ andyB:
Was es nicht so alles gibt bei Delphi... :?
Auf die Idee, dass Windows vor SysUtils in der uses-Anweisung stehen muss, bin ich noch gar nicht gekommen!
Werd ich mal ausprobieren, vielen Dank für den Tip!