Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Unit spielt verrückt (https://www.delphipraxis.net/144417-unit-spielt-verrueckt.html)

Jamah 7. Dez 2009 15:02


Unit spielt verrückt
 
Hallo.
Ich habe folgendes Problem:
Ich benutze Delphi 2009. Und da ich die Socketkomponente nicht nutzen konnte, also TClientSocket und TServerSocket. Also. Ich hab dann die Sockets.dcu eingefügt und aufgerufen.
Jetzt hab ich ein programm geschrieben, das ist nur ein kleiner LAN-Chat. was aber passiert, wenn ich ihn compilen will[Code]:
Code:
DCC Fataler Fehler Sockets.pas(6): F2092 Das Programm oder die Unit 'Sockets' ruft sich selbst wieder auf
Ich ab also die sockets aus den Uses genommen, dann kam aber folgendes:
Code:
DCC Fehler Sockets.pas(9): E2003 Undeklarierter Bezeichner: 'TTcpClient'
DCC Warnung Sockets.pas(16): W1055 PUBLISHED verursachte, dass RTTI ($M+) zu Typ 'TClientSocket' hinzugefügt wurde
DCC Fehler Sockets.pas(26): E2010 Inkompatible Typen: 'TComponentClass' und 'Class reference'
DCC Fataler Fehler Chat.pas(8): F2063 Verwendete Unit 'Sockets.pas' kann nicht compiliert werden
Dann hab ich die Sockets in die Implementation unter Uses genommen, und dann kommen wieder endlose Fehler:

Code:
DCC Fehler Sockets.pas(9): E2003 Undeklarierter Bezeichner: 'TTcpClient'
DCC Warnung Sockets.pas(16): W1055 PUBLISHED verursachte, dass RTTI ($M+) zu Typ 'TClientSocket' hinzugefügt wurde
DCC Fataler Fehler Sockets.pas(24): F2092 Das Programm oder die Unit 'Sockets' ruft sich selbst wieder auf
Hier ist der Quelltext der Unit Sockets:
Delphi-Quellcode:
unit Sockets;

interface

uses
  SysUtils, Classes, Sockets;

type
  TClientSocket = class(TTcpClient)
  private
    { Private-Deklarationen }
  protected
    { Protected-Deklarationen }
  public
    { Public-Deklarationen }
  published
    { Published-Deklarationen }
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Standard', [TClientSocket]);
end;

end.

ToFaceTeKilla 7. Dez 2009 15:19

Re: Unit spielt verrückt
 
Die Sockets-Unit die du benutzt ist eine externe, wenn ich das richtig verstehe?
Dann solltest du dein Programm (also deine Unit) nicht auch Sockets nennen...

Ralf Kaiser 7. Dez 2009 15:23

Re: Unit spielt verrückt
 
Zitat:

Zitat von Jamah


Delphi-Quellcode:
unit Sockets; // Name der Unit ist "Sockets"

interface

uses
  SysUtils, Classes, Sockets; // in der Usesliste steht ebenfalls "Sockets"

Du hast da eine Unit namens "Sockets" die in der Usesliste eine Unit Names "Sockets" enthält! Das geht so nicht. Um das Problem zu umgehen solltest du deine "Sockets.pas" umbenennen (z.B. "MySockets.pas")

Allerdings verstehe ich nicht, was du machen willst...

Willst du eine eigene TClientSocket-Variante entwicklen? Dann solltest du auch diese Komponente nicht so nennen wie eine bereits existierende.

Eventuell solltest du auch erst einmal beschreiben, warum du das Problem hast:

Zitat:

Zitat von Jamah
Und da ich die Socketkomponente nicht nutzen konnte, also TClientSocket und TServerSocket.

Wenn du das Problem löst, dann musst du wahrscheinlich gar keine eigene TClientSocket erstellen. Leider hast du keine Informationen angegeben, warum das Problem besteht! Und darum wird dir leider in dieser Hinsicht niemand helfen können. Bitte beschreibe doch mal genauer, warum du die Standard-Komponenten nicht benutzen kannst (Fehlermeldungen??)

Ciao,
Ralf

Jamah 7. Dez 2009 16:42

Re: Unit spielt verrückt
 
Nee in RAD Stdio 2009 wird TClientSocket nicht mitinstalliert.....

Ralf Kaiser 7. Dez 2009 16:50

Re: Unit spielt verrückt
 
Da ich nie D2009 benutzt habe wusste ich das nicht (ist eigentlich eine Delphi Standard-Komponente). Aber schau mal hier: Where to Locate the Missing TServerSocket and TClientSocket Delphi components

Natürlich musst du in dem entsprechenden Ordner für D2009 nachsehen und die Version der "dclsocketsXXX.BPL" auswählen die D2009 entspricht (ist das dann dclsockets112.bpl??? - sollte eigentlich)

(und in meinem D2007 muss ich das Package irgenwann mal manuell installiert haben...)

Jamah 7. Dez 2009 20:41

Re: Unit spielt verrückt
 
Umbenennen hat geholfen ;)
Danke.
Aber ich habe ncoh eben eine Frage, für die ich keinen neuen Thread aufmachen wollte.

Delphi-Quellcode:
begin
try
  if Edit3.Text = '' then
  begin
  end
 except
 begin
  Dialogs.MessageDlg('Bitte geben Sie einen gültigen Benutzernamen an!', mtError, mbOK);  // Funktion überladen, kann nicht mit diesen Argumenten aufgerufen werden.
  end
end;
Was will mir das sagen?

leddl 8. Dez 2009 06:48

Re: Unit spielt verrückt
 
Zitat:

Zitat von Jamah
[...] Funkiton überladen, kann nicht mit diesen Argumenten aufgerufen werden [...]
Was will mir das sagen?

:gruebel: Dass die Funktion nicht mit diesen Argumenten aufgerufen werden kann? :gruebel:

hoika 8. Dez 2009 07:16

Re: Unit spielt verrückt
 
Hallo,

MessageDlg('Bitte geben Sie einen gültigen Benutzernamen an!', mtError, mbOK, 0);
(die ,0 fehlt),

Und lass bitte das Dialogs weg.

Oder hast du wieder eine eigene gleichnamige Methode geschrieben ??? ;)


Früher hiess eine solche Meldung auch anders.
"Argument fehlt"

Seit Delphi aber Funktinonen überladen kann
(gleicher Name, aber andere Parameter), bringt Delphi halt diese Meldung.


Heiko

himitsu 8. Dez 2009 07:19

Re: Unit spielt verrückt
 
Zitat:

Zitat von Jamah
Funktion überladen, kann nicht mit diesen Argumenten aufgerufen werden.

bei mir ist diese Meldung etwas aussagekräftiger :D
Zitat:

[Fehler] Unit1.pas(27): Inkompatible Typen: 'TMsgDlgButtons' und 'TMsgDlgBtn'
also die 0 (HelpCtx) fehlt zwar wirklich, aber zuerstmal wird das mbOK bemängelt.

Delphi-Quellcode:
Dialogs.MessageDlg('Bitte geben Sie einen gültigen Benutzernamen an!', mtError, [mbOK], 0);


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:55 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