AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Indy compile problem
Thema durchsuchen
Ansicht
Themen-Optionen

Indy compile problem

Ein Thema von th_bone · begonnen am 11. Aug 2007 · letzter Beitrag vom 11. Aug 2007
Antwort Antwort
th_bone

Registriert seit: 16. Jun 2004
172 Beiträge
 
Delphi 2005 Professional
 
#1

Indy compile problem

  Alt 11. Aug 2007, 10:16
Hi,

ich versuche den snapshot von indy 10 zu compilieren bekomme aber bei dclindycore90 folgende fehler:

[Fehler] IdDsnPropEdBinding.pas(116): E2029 Bezeichner erwartet, aber 'TYPE' gefunden
[Fehler] IdDsnPropEdBinding.pas(124): E2029 Bezeichner erwartet, aber 'PROCEDURE' gefunden
[Fehler] IdDsnPropEdBinding.pas(124): E2065 Ungenügende Forward- oder External-Deklaration: 'FillHandleList'
[Fehler] IdDsnPropEdBinding.pas(125): E2065 Ungenügende Forward- oder External-Deklaration: 'GetListValues'


aber irgendwie sehe ich nicht was zu diesen fehlern führt
(kenne mich aber auch mit diesen compiler einstellungen nicht wirklich aus...)

jemand eine Idee ?

oder hat jemand einen aktuellen funktionierenden Indy 10 snapshot den er mir zukommen lassen kann.

Danke

Ralf

Hier die betreffende Unit (kommentare habe ich zur Übersicht entfernt)


Delphi-Quellcode:
unit IdDsnPropEdBinding;

interface
 {$I IdCompilerDefines.inc}
 {$IFDEF WidgetWinForms}
 {$R 'IdDsnPropEdBindingNET.TIdDsnPropEdBindingNET.resources' 'IdDsnPropEdBindingNET.resx'}
 {$ENDIF}

uses
  Classes,
  IdSocketHandle,
  {$IFDEF WidgetWinForms}
  IdDsnPropEdBindingNET;
  {$ENDIF}
  {$IFDEF WidgetVCLLikeOrKylix}
  IdDsnPropEdBindingVCL;
  {$ENDIF}

type // hier bleibt der compiler stehen und meldet die fehler
  {$IFDEF WidgetWinForms}
   TIdPropEdBindingEntry = TIdDsnPropEdBindingNET;
  {$ENDIF}
  {$IFDEF WidgetVCLLikeOrKylix}
  TIdPropEdBindingEntry = TIdDsnPropEdBindingVCL;
  {$ENDIF}

procedure FillHandleList(const AList: string; ADest: TIdSocketHandles);
function GetListValues(const ASocketHandles : TIdSocketHandles) : String;

implementation
{$IFDEF WidgetWinForms}
procedure FillHandleList(const AList: string; ADest: TIdSocketHandles);
begin
  IdDsnPropEdBindingNET.FillHandleList(AList,ADest);
end;

function GetListValues(const ASocketHandles : TIdSocketHandles) : String;
begin
  Result := IdDsnPropEdBindingNET.GetListValues(ASocketHandles);
end;
{$ENDIF}
{$IFDEF WidgetVCLLikeOrKylix}
procedure FillHandleList(const AList: string; ADest: TIdSocketHandles);
begin
   IdDsnPropEdBindingVCL.FillHandleList(AList,ADest);
end;

function GetListValues(const ASocketHandles : TIdSocketHandles) : String;
begin
   Result := IdDsnPropEdBindingVCL.GetListValues( ASocketHandles);
end;
{$ENDIF}
end.
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: Indy compile problem

  Alt 11. Aug 2007, 11:26
Hi,
diese Compiler-Einstellungen sind vielmehr Compiler-Direktiven. Du kannst Dir die Verarbeitung wie die durch einen C-Präprozessor vorstellen. Der Compiler läuft (virtuell) in zwei Schritten über den Quelltext, im ersten werden solche Direktiven ausgewertet, im zweiten der dann resultierende Code kompiliert.
Das was Du in dem geposteten Code findest ist eine Form der bedingten Compilierung, es wird geprüft, ob die entsprechende Bedingung gesetzt wurde und der Code zwischen $IFDEF (und den verwandten) sowie $ENDIF wird nur dann eingefügt, wenn die entsprechende Bedingung gesetzt ist.
Das Setzen findest Du in den Projektoptionen beim Compiler irgendwo (heißt Bedingungen, wenn ich mich nicht irre). Dort kannst Du dann z.B. einfach WidgetWinForms eintragen. Einige solcher Schalter werden aber auch von Delphi selbst gesetzt und sollten deswegen nicht einfach verändert oder per Hand gesetzt werden, dazu gehört unter anderem eben die Version des Compilers selbst und ob es sich um ein Win32 oder Kylix Compiler handelt.

Das Problem in Deinem Fall liegt in folgendem Code:
Delphi-Quellcode:
uses
  Classes,
  IdSocketHandle,
  {$IFDEF WidgetWinForms} 
  IdDsnPropEdBindingNET;
  {$ENDIF} 
  {$IFDEF WidgetVCLLikeOrKylix} 
  IdDsnPropEdBindingVCL;
  {$ENDIF}
Hier steckt einfach das abschließende Semikolon in einer solchen Bedingung, besser wäre es deshalb das ganze in folgende Form zu bringen:
Delphi-Quellcode:
uses
  Classes,
  IdSocketHandle
  {$IFDEF WidgetWinForms} 
  ,IdDsnPropEdBindingNET
  {$ENDIF} 
  {$IFDEF WidgetVCLLikeOrKylix} 
  ,IdDsnPropEdBindingVCL
  {$ENDIF}
  ;
Wie Du siehst wurde das Komma so verschoben, dass es nun vor einem eventuell zusätzlichen Element steht und das Semikolon wird (unabhängig von den bedingten Teilen) direkt am Ende eingefügt.

Gruß Der Unwissende
  Mit Zitat antworten Zitat
th_bone

Registriert seit: 16. Jun 2004
172 Beiträge
 
Delphi 2005 Professional
 
#3

Re: Indy compile problem

  Alt 11. Aug 2007, 12:01
Hi,

danke - da wäre ich im Leben nicht darauf gekommen das ";" am ende zu machen - ausgehend von Deinem vorschlag konnte ich
jetzt alles compilieren.

Es sieht so aus, dass die Compilerdirectiven nicht genutzt werden

Delphi-Quellcode:
  {$IFDEF WidgetVCLLikeOrKylix} 
     TIdPropEdBindingEntry = TIdDsnPropEdBindingVCL; // das hier wird nicht beachtet
  {$ENDIF}
Da ich für VCL compiliere hab ich mir jetzt mal so beholfen (vielleicht hilfts ja noch jemanden der sich am snapshot verucht)

Nochmals danke

Ralf

Delphi-Quellcode:
unit IdDsnPropEdBinding;

interface
 {$I IdCompilerDefines.inc}

{$IFDEF WidgetWinForms}
{$R 'IdDsnPropEdBindingNET.TIdDsnPropEdBindingNET.resources' 'IdDsnPropEdBindingNET.resx'}
{$ENDIF}
uses
  Classes,
  IdSocketHandle
  {$IFDEF WidgetWinForms}
  ,IdDsnPropEdBindingNET
  {$ENDIF}
  //{$IFDEF WidgetVCLLikeOrKylix}
  ,IdDsnPropEdBindingVCL
  //{$ENDIF}
  ;

{
Design Note:  It turns out that in DotNET, there are no services file functions and IdPorts
does not work as expected in DotNET.  It is probably possible to read the services
file ourselves but that creates some portability problems as the placement is different
in every operating system.

e.g.

Linux and Unix-like systems - /etc
Windows 95, 98, and ME - c:\windows
Windows NT systems - c:\winnt\system32\drivers\etc

Thus, it will undercut whatever benefit we could get with DotNET.

About the best I could think of is to use an edit control because
we can't offer anything from the services file in DotNET.

TODO:  Maybe there might be a way to find the location in a more eligant
manner than what I described.
}


type
(*
  {$IFDEF WidgetWinForms}
  TIdPropEdBindingEntry = TIdDsnPropEdBindingNET;
  {$ENDIF}
  {$IFDEF WidgetVCLLikeOrKylix}
*)

  TIdPropEdBindingEntry = TIdDsnPropEdBindingVCL;
// {$ENDIF}

procedure FillHandleList(const AList: string; ADest: TIdSocketHandles);
function GetListValues(const ASocketHandles : TIdSocketHandles) : String;

implementation
(*
{$IFDEF WidgetWinForms}
procedure FillHandleList(const AList: string; ADest: TIdSocketHandles);
begin
  IdDsnPropEdBindingNET.FillHandleList(AList,ADest);
end;

function GetListValues(const ASocketHandles : TIdSocketHandles) : String;
begin
  Result := IdDsnPropEdBindingNET.GetListValues(ASocketHandles);
end;
{$ENDIF}
{$IFDEF WidgetVCLLikeOrKylix}
*)

procedure FillHandleList(const AList: string; ADest: TIdSocketHandles);
begin
   IdDsnPropEdBindingVCL.FillHandleList(AList,ADest);
end;

function GetListValues(const ASocketHandles : TIdSocketHandles) : String;
begin
   Result := IdDsnPropEdBindingVCL.GetListValues( ASocketHandles);
end;
// {$ENDIF}
end.
P.S. folgende unit musste ich auch noch nach demselben schema ändern, um Indy snapshot komplett zu installieren

Delphi-Quellcode:
unit IdDsnSASLListEditorForm;

interface

{$I IdCompilerDefines.inc}

uses
  {$IFDEF WidgetWinforms}
  Classes,
  IdDsnSASLListEditorFormNET;
  {$R 'IdDsnSASLListEditorFormNET.TfrmSASLListEditor.resources' 'IdDsnSASLListEditorFormNET.resx'}
  {$ENDIF}
  //{$IFDEF WidgetVCLLikeOrKylix}
  IdDsnSASLListEditorFormVCL;
  //{$ENDIF}

type
  {$IFDEF WidgetWinforms}
  //we make a create here because I'm not sure how the Visual Designer for WinForms
  //we behave in a package. I know it can act weird if something is renamed
  TfrmSASLListEditor = class(IdDsnSASLListEditorFormNET.TfrmSASLListEditor)
  public
    constructor Create(AOwner : TComponent);
  end;
  {$ENDIF}
  //{$IFDEF WidgetVCLLikeOrKylix}
  TfrmSASLListEditor = class(TfrmSASLListEditorVCL);
  //{$ENDIF}

implementation

{$IFDEF WidgetWinForms}
constructor TfrmSASLListEditor.Create(AOwner : TComponent);
begin
  inherited Create;
end;
{$ENDIF}
end.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:56 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