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.