IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API, COM et SDKs Delphi Discussion :

Aide pour communication avec DLL C++


Sujet :

API, COM et SDKs Delphi

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 74
    Par défaut 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 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 :
    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.
    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.
    Fichiers attachés Fichiers attachés

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Communication avec DLL (CWnd)
    Par Taron31 dans le forum MFC
    Réponses: 5
    Dernier message: 06/03/2006, 19h03
  2. [3D] Aide pour développer avec delta3D
    Par astragoth dans le forum Développement 2D, 3D et Jeux
    Réponses: 7
    Dernier message: 06/02/2006, 13h56
  3. [Dev-C++] Aide pour programmer avec Qt 4
    Par stone dans le forum EDI
    Réponses: 3
    Dernier message: 02/02/2006, 08h58
  4. Aide pour projet avec carte asi candibus
    Par sinicha dans le forum C
    Réponses: 13
    Dernier message: 16/01/2006, 15h32
  5. [W3C] aide pour html avec mozilla et netscape
    Par teambeyou dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 06/09/2005, 20h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo