Bonjour
Je veux créer une DLL capable de transmettre un fichier par FTP sous Rad Studio Seattle (pour accéder au TIdSSLIOHandlerSocketOpenSSL)
J'ai fait un test concluant avec C++ Builder 6 (sans TIdSSLIOHandlerSocketOpenSSL bien sûr).
Je reprends mon code BCB6 sur Rad Studio. Tout va bien jusqu'à la compilation mais l'édition des liens échoue :
Bien sûr tous les Include nécessaires sont présents sinon la compilation échouerait.[ilink32 Erreur] Error: 'Idftp::TIdFTP::' externe non résolu, référencé depuis H:\MES DOCUMENTS\EMBARCADERO\STUDIO\PROJETS\CPP_DLL\WIN32\DEBUG\FILE1.OBJ
[ilink32 Erreur] Error: '__fastcall Idftp::TIdFTP::~TIdFTP()' externe non résolu, référencé depuis H:\MES DOCUMENTS\EMBARCADERO\STUDIO\PROJETS\CPP_DLL\WIN32\DEBUG\FILE1.OBJ
[ilink32 Erreur] Error: '__fastcall Idexplicittlsclientserverbase::TIdExplicitTLSClient::~TIdExplicitTLSClient()' externe non résolu, référencé depuis H:\MES DOCUMENTS\EMBARCADERO\STUDIO\PROJETS\CPP_DLL\WIN32\DEBUG\FILE1.OBJ
[ilink32 Erreur] Error: '__fastcall Idtcpconnection::TIdTCPConnection::~TIdTCPConnection()' externe non résolu, référencé depuis H:\MES DOCUMENTS\EMBARCADERO\STUDIO\PROJETS\CPP_DLL\WIN32\DEBUG\FILE1.OBJ
[ilink32 Erreur] Error: '__fastcall Idcomponent::TIdComponent::~TIdComponent()' externe non résolu, référencé depuis H:\MES DOCUMENTS\EMBARCADERO\STUDIO\PROJETS\CPP_DLL\WIN32\DEBUG\FILE1.OBJ
[ilink32 Erreur] Error: '__fastcall Idbasecomponent::TIdBaseComponent::TIdBaseComponent(System::Classes::TComponent *)' externe non résolu, référencé depuis H:\MES DOCUMENTS\EMBARCADERO\STUDIO\PROJETS\CPP_DLL\WIN32\DEBUG\FILE1.OBJ
[ilink32 Erreur] Error: Impossible d'effectuer le lien
La doc Embarcadero dit ceci https://docwiki.embarcadero.com/RADS...s_%27module%27
Mais rien ne me"cause" dans ce qui y est dit.
Je précise aussi que
1) l'option Projet "Lier avec la bibliothèque d’exécution delphi" est validée sans quoi un autre message d'erreur apparait
2) L'option "lier avec la RTL dynamique" est sans effet
Ci dessous le code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 #pragma hdrstop #pragma argsused #include <System.Classes.hpp> #include <Vcl.Controls.hpp> #include <Vcl.StdCtrls.hpp> #include <Vcl.Forms.hpp> #include <IdFTP.hpp> #include <IdTCPClient.hpp> #include <IdTCPConnection.hpp> #include <ComCtrls.hpp> #include <IdBaseComponent.hpp> #include <IdComponent.hpp> #include <IdIOHandler.hpp> #include <IdIOHandlerSocket.hpp> #include <IdIOHandlerStack.hpp> #include <IdSSL.hpp> #include <IdSSLOpenSSL.hpp> #include <IdFTP.hpp> #include <IdTCPClient.hpp> #include <IdTCPConnection.hpp> #include <ComCtrls.hpp> #include <IdExplicitTLSClientServerBase.hpp> #include <IdFSP.hpp> #include <IdUDPBase.hpp> #include <IdUDPClient.hpp> #include <Vcl.FileCtrl.hpp> extern "C" __declspec(dllexport) __stdcall boolean SendTool(TForm * Form,TStream * Stream, TIdSSLIOHandlerSocketOpenSSL * IdSSL); TIdFTP * IdFTP1; boolean __stdcall SendTool(TForm * Form, TStream * Stream, TIdSSLIOHandlerSocketOpenSSL * IdSSL) { IdFTP1 = new TIdFTP(Form); try { IdFTP1->Host=<host> IdFTP1->Username=<user> IdFTP1->Password=<pw> IdFTP1->IOHandler=IdSSL; IdFTP1->UseTLS=utUseExplicitTLS; IdFTP1->DataPortProtection=ftpdpsPrivate; IdFTP1->Port=21; IdFTP1->TransferType= ftBinary; IdFTP1->Connect(); } __finally { if (IdFTP1->Connected()) { IdFTP1->Put(Stream,"test2"); IdFTP1->Disconnect(); IdFTP1->Free(); } }; return true; }
Partager