Bonjour,
Je cherche à utiliser une DLL C++ externe dans mon application Delphi.
Mon problème est que je ne comprend pas comment accéder aux déclarations des fonctions vu qu'elles sont en C++.
Voici un extrait du code (fichier complet en pièce jointe) :
Code c++ : 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 #pragma once namespace Rimage { namespace Rapid { namespace Impl { class InternClientSession; class WinSubclasser; }}} namespace Rimage { namespace Rapid { namespace Api { class Connection; class ISessionStatusListener; class IJobStatusListener; class IXmlModifyListener; class ServerAlert; class ImageOnlyJob; class ProductionOnlyJob; class ImageAndRecordJob; ... class SIMPLECLIENT_API ClientSession { public: // No public constructor virtual ~ClientSession(); virtual Connection* Connect(LPCTSTR clientId, LPCTSTR host=NULL, LPCTSTR port=NULL); ...
Côté Delphi voici comment j'ai essayé d'y accéder :
J'ai essayé quelques variantes mais sans trop savoir quoi modifier et surtout sans succès.
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 type RimageRapidApiConnection = record end; PRimageRapidApiConnection = ^RimageRapidApiConnection; TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private FPRimageRapidApiConnection: PRimageRapidApiConnection; end; var Form1: TForm1; TRimageRapidApiClientSessionConnect: function(ClientID: PAnsiChar; Host: PAnsiChar = nil; Port: PAnsiChar = nil): PRimageRapidApiConnection; cdecl; function fRimageRapidApiClientSessionConnect(const ADLLHandle: HModule; AClientID: PAnsiChar; AHost: PAnsiChar = nil; APort: PAnsiChar = nil): PRimageRapidApiConnection; implementation {$R *.dfm} function fRimageRapidApiClientSessionConnect(const ADLLHandle: HModule; AClientID: PAnsiChar; AHost: PAnsiChar = nil; APort: PAnsiChar = nil): PRimageRapidApiConnection; begin Result := nil; try // @TRimageRapidApiClientSessionConnect := GetProcAddress(ADLLHandle, 'Rimage.Rapid.Api.ClientSession.Connect'); // @TRimageRapidApiClientSessionConnect := GetProcAddress(ADLLHandle, 'Rapid.Api.ClientSession.Connect'); // @TRimageRapidApiClientSessionConnect := GetProcAddress(ADLLHandle, 'Api.ClientSession.Connect'); // @TRimageRapidApiClientSessionConnect := GetProcAddress(ADLLHandle, 'ClientSession.Connect'); @TRimageRapidApiClientSessionConnect := GetProcAddress(ADLLHandle, 'Connect'); if Assigned(TRimageRapidApiClientSessionConnect) then Result := TRimageRapidApiClientSessionConnect(AClientID, AHost, APort); except // end; end; procedure TForm1.Button1Click(Sender: TObject); var DLLHandle: THandle; begin DLLHandle := LoadLibrary(PChar(ExtractFilePath(Application.ExeName) + 'Rimage.Rapid.Api.dll')); if DLLHandle >= 32 then begin FPRimageRapidApiConnection := fRimageRapidApiClientSessionConnect(DLLHandle, 'test'); if FPRimageRapidApiConnection <> nil then ShowMessage('cool'); FreeLibrary(DLLHandle); end; end; end.
Du coup si quelqu'un à une idée ou une piste pour moi...
Merci.
Partager