1 pièce(s) jointe(s)
Aide pour communication avec DLL C++
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:
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 :
Code:
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. |
J'ai essayé quelques variantes mais sans trop savoir quoi modifier et surtout sans succès.
Du coup si quelqu'un à une idée ou une piste pour moi... ;)
Merci.