Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   ftp mit wininet (https://www.delphipraxis.net/168424-ftp-mit-wininet.html)

ulilüding 21. Mai 2012 08:05

Delphi-Version: 5

ftp mit wininet
 
Hi Leute,

ein Service-Programm greift u.A. auf einen FTP-server per FTPCommand zu. Dazu wird die wininet.pas eingebunden, das Kommando wird übegeben mit (Auszug aus Programmcode)

FtpCommand(connection_handle,true,FTP_TRANSFER_TYP E_ASCII,PChar('LIST '+currentDirectory),0,@data_handle)

sieht man sich wininet.pas an so wird die Sache einfach weitergereicht an die wininet.dll (winetdll ist als Konstante für wininet.dll deklariert)

function FtpCommand; external winetdll name 'FtpCommandA';

Die Parameter des Aufrufs stimmen anscheinened (Auszug ebenfalls aus der wininet.pas)

function FtpCommand(hConnect: HINTERNET; fExpectResponse: BOOL; dwFlags: DWORD; lpszCommand: PChar; dwContext: DWORD; phFtpCommand: PHINTERNET): BOOL; stdcall;

Nun zum Problem:
- Das ganze unter WIN XP kompiliert laüft einwandfrei (nutzt wininet.dll von XP)
- Dieses Kompilat als exe unter WIN 7 läuft einwandfrei (nutzt wininet.dll von WIN 7)
- Versuch, den gleichen code unter WIN 7 zu kompilieren, scheitert mit der Bemerkung: zu viele Parameter. Offensichtlich hält der Compiler die Angabe des data-handle-Pointer für überflüssig. Läßt man den weg, so wird brav kompiliert, aber das Programm hängt sich an dieser Stelle natürlich auf (wohin auch mit der LIST?)

Die wininet.pas ist unter beiden Bettriebssystemen identisch. Die wininet.dll kann auf beiden Betriebssystemen unterschiedlich sein, allerdings benutzt die unter XP kompilierte exe die WIN 7 dll offensichtlich problemlos. Unter beiden Betreibssystemen läuft eine identische Delphi 5 Installation.

Dankbar für jede schlaue Idee
Uli Lüding

lbccaleb 22. Mai 2012 17:43

AW: ftp mit wininet
 
Was gibt denn GetLastError beim crash aus?

ulilüding 25. Mai 2012 08:38

AW: ftp mit wininet
 
tja, leider crashed das prg nicht, sondern bleibt beim Aufruf mit dem FTPCommand einfach stehen. Muß man dann per taskmanager beenden. Ein getLastError wird nicht mehr ereeicht. Selbst die "If-clause" des eigenen Aufrufs steht (if (FTPCommand(blabla...) else (jeglichen Mißerfolg anzeigen)). Blöd, was? (ich oder die Angelegenheit)
LG Uli

Luckie 25. Mai 2012 09:02

AW: ftp mit wininet
 
Ich habe auf meiner Homepage einen nonVCL FTP-Client mit Source. Probier doch den mal aus.
http://michael-puff.de/Programmierung/Delphi/Programme/

jaenicke 25. Mai 2012 10:00

AW: ftp mit wininet
 
Zitat:

Zitat von ulilüding (Beitrag 1167386)
- Versuch, den gleichen code unter WIN 7 zu kompilieren, scheitert mit der Bemerkung: zu viele Parameter. Offensichtlich hält der Compiler die Angabe des data-handle-Pointer für überflüssig.

Dann muss da aber irgendein Unterschied sein...
Welche Parameter werden denn dort angezeigt, wenn du die Klammer hinter den Befehl schreibst? (Oder dahinter Strg + Shift + Leertaste drückst)

ulilüding 26. Mai 2012 10:41

AW: ftp mit wininet
 
nun, die eingabe von "ftpcommand(" zeigt genu das, was zu vemuten war: der pointer auf die "Ablage" = @data_handle wird nicht mehr gewünscht. Da scheint also unter WIN 7 eine andere wininet.dll am Werk zu sein als unter WIN XP. Die (unter XP kompilierte) exe benutzt möglichweise was anderes, da gibt es ja noch jede Menge "migrations". Vielleicht muß man der wininet.pas von WIN 7 sagen, welche wininet.dll sie nehmen soll (aber welche ist das?). Idee, wie man das rauskriegt?
Danke für Eure Hilfe
LG Uli

jaenicke 26. Mai 2012 11:10

AW: ftp mit wininet
 
Naja, Moment... die wininet.pas kommt von Delphi, nicht vom Betriebssystem. Die Unit müsste also dieselbe sein. Benenne doch deinen Delphi-Ordner einfach mal um und kopiere den vom anderen PC.

(Wobei Delphi 5 unter Win 7 eher im XPMode Sinn macht..)

ulilüding 27. Mai 2012 08:14

AW: ftp mit wininet
 
Das ist völlig richtig. Die Delphi-Installation ist die gleiche, also auch die wininet.pas (zumal ich die schon hin- und herkopiert habe, ohne Erfolg). Der Unterschied muß in der (jeweils verwendeten) wininet.dll liegen. Ich vermute, daß WIN7 das XP-Kompilat als solches erkennt und für die "Weiterletung" (mehr macht die wininet.pas de facto ja nicht) die entsprechende dll bereitstellt. Will man hingegen unter WIN 7 kompilieren, so bekommt der Kompiler bzw. die exe die dll angereicht, bei der der letzte Parameter fehlt (warum auch immer). Deine Idee, D5 im "XPmode" zu betreiben, klingt nach einer guten Idee. Als WIN7-rookie sei mir erlaubt zu fragen, wie das bewerkstelligt wird (obwohl Ihr Euch wahrscheinlich gerade totlacht):-D Danke für die Hilfe, und Danke auch an luckie für die source, darin war allerdings kein ftpCommand zu finden, hat also nix geholfen.

LG Uli

jaenicke 27. Mai 2012 08:33

AW: ftp mit wininet
 
Wie du die Funktion aufrufen kannst, das heißt deren Parameter beim Kompilieren, stehen in der Unit drin und nicht in der DLL. Wenn es also dieselbe Unit ist, dann ist auch der Aufruf derselbe.

Irgendetwas stimmt da nicht...
Ich bin im Moment noch unterwegs, aber heute Abend wieder zu Hause. Dann kann ich im virtuellen PC bei Delphi 5 schauen wie es bei mir aussieht.

Was den XPMode angeht:
Die notwendigen Dateien kannst du von Microsoft hier herunterladen, sofern du nicht nur eine Home Edition von Windows hast. Der steht nämlich erst ab der Professional zur Verfügung.
Bei den Home Editions bietet sich eine andere Virtualisierungslösung wie VirtualBox, VMWare oder der alte Virtual PC an.
http://www.microsoft.com/windows/vir.../download.aspx

ulilüding 30. Mai 2012 10:05

AW: ftp mit wininet
 
habe gerade nochmal in der wininet.pas nachgeschaut: da steht der genau der FTPCommand-Aufruf drin wie oben in meinem Startbeitrag angegeben, also MIT dem Pointer auf data_handle. Trotzdem wird dieser Parameter bei der Eingabe von "FTPCommand(" nicht mit aufgeführt und somit nicht erwartet. Könnte der Compiler unter WIN 7 "klammheimlich" eine andere wininet.pas nehmen (und wo ist die dann?). Glaube ich eher nicht. Es scheint so, als ob delphi 5 unter WIN 7 diese Funktion nicht richtig "liest"? In voller Ahnungslosigkeit

LG Uli


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:35 Uhr.
Seite 1 von 2  1 2      

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