Ich beschäftige mich gerade mit FTP und teste dafür das Framework Synapse. Dort gibt es ein Demo-Programm sftp. Das ist allerdings ein Delphi-Projekt. Es gibt nur wenige FreePascal-Demos und leider keines für FTP. Unter Delphi funktionierte das Demo-Programm "sftp" super. Ich konnte das sehr gut testen, weil auch mein Domain Hoster "df" testweise sftp für Shared Server freigeschaltet hat.
Dann habe ich die Lazarus-Konvertierungstools verwendet, um das Projekt in ein Lazarus-Projekt umzuwandeln. Das Projekt lässt sich auch sehr gut compilieren: Man muss nur in "SimpleSFTP.pas" die Unit "windows" ergänzen und überall, wo der Compiler hängenbleibt {$define FPC} {$define WIN32} hinzufügen. Voraussetzung ist allerdings, dass man vorher unter Delphi das Projekt ans Laufen gebracht hat, weil man dort noch die Unit cryptlib.pas als Schnittstelle zu cl32.dll (und natürlich auch cl32.dll) irgendwo aus dem Internet herunterladen muss. (Für Linux verwendet man natürlich 'libcl.so'.)
Mein Problem ist, dass zwar die im Windows-Verzeichnis als Administrator (Vista) abgelegte cl32.dll unter Delphi einwandfrei gefunden wird. Unter Lazarus kommt aber die Fehlermeldung "Die Anwendung konnte nicht gestartet werden, weil cl32.dll nicht gefunden wurde." Das gleiche passiert, wenn ich die dll im Anwendungsverzeichnis ablege. Ich habe auch mal den Suchpfad auf das Windows-Verzeichnis gesetzt, hilft aber auch nix.
Die Schnittstellen-Definitionen in cryptlib.pas sehen alle ungefähr so aus
Code: Alles auswählen
unit cryptlib;
.....
interface
{$define FPC}
{$define WIN32}
{$A+} {Set Alignment on}
{$F+} {Force function calls to FAR}
{$Z+} {Force all enumeration values to Integer size}
const
{$IFDEF WIN32}
// cryptlibname = 'CL32.DLL'; { dynamic linkname for Windows (Delphi) }
cryptlibname = 'cl32.dll';
{$ELSE}
cryptlibname = 'libcl.so'; { library name for Unix/Linux (Kylix) }
{ symbolic link should be used for libcl.so -> libcl.so.3.x.y }
{$ENDIF}
.....
function cryptDeleteAttribute( const cryptHandle: CRYPT_HANDLE;
const attributeType: CRYPT_ATTRIBUTE_TYPE ): Integer;
{$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external cryptlibname;
.....