![]() |
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 |
AW: ftp mit wininet
Was gibt denn GetLastError beim crash aus?
|
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 |
AW: ftp mit wininet
Ich habe auf meiner Homepage einen nonVCL FTP-Client mit Source. Probier doch den mal aus.
![]() |
AW: ftp mit wininet
Zitat:
Welche Parameter werden denn dort angezeigt, wenn du die Klammer hinter den Befehl schreibst? (Oder dahinter Strg + Shift + Leertaste drückst) |
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 |
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..) |
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 |
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. ![]() |
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 |
AW: ftp mit wininet
Schreib mal explizit wininet.FtpCommand...
Eigentlich kann es nur sein, dass irgendwo noch eine gleichnamige Funktion existiert. |
AW: ftp mit wininet
Hallo Leute,
meinen Dank an alle, die sich der Sache angebommen haben. Daß die wininet.pas vom WIN 7 vergurkt wird scheint richtig zu sein (->Jaenicke, Dein Tipp). Ich habe in meinem Programmcode eine identische Funktion (=Übergabe an die dll) unter leicht anderem Namen eingebaut, und alles ist gut. Für diese Arbeit wird die wininet.pas dann eben nicht genommen. Muß man ja nicht (und die .pas ist - äh - WIE alt?). Danke nochmal, und viel Spaß und Erfolg an anderen Themen. LG Uli |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz