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 :

Exemple de communication entre application C++ et Delphi


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 53
    Points : 40
    Points
    40
    Par défaut Exemple de communication entre application C++ et Delphi
    Salut,

    Si quelqu'un a un exemple concret pour faire communiquer 2 applications C++ et Delphi. J'ai déjà regardé sur le forum et des articles sur google mais n'ai rien trouvé.

    J'ai déjà essayé avec WM_COPYDATA mais ça n'est pas abouti.

    Je veux transmettre cette Record ou structure de Delphi to C++ et C++ to Delphi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    TData = RECORD
        Nombre: Integer;
        Str: String[255];
        vBool: Boolean;
        pData: Pointer;
    END;

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 844
    Points
    24 844
    Par défaut
    Tu pourrais nous fournir plus de code !

    C++ ? C++ Builder ?

    Evite String[255] qui contient la longueur en [0]
    Préfère array[0..255] of AnsiCharPréfère les types Windows, cela fait une référence commune

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    TData = RECORD
        Nombre: DWORD;
        Str: array[0..255] of AnsiChar;
        vBool: BOOL;
        pData: Pointer;
    END;
    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct TData
    {
      DWORD Nombre;
      char Str[256]; // AnsiChar sous C++Builder
      BOOL vBool;
      void *pData;
    };

    Ensuite, tu fournis pData !
    C'est IMPOSSIBLE !

    C'est pourtant clairement écrit :
    Remarks

    The data being passed must not contain pointers or other references to objects not accessible to the application receiving the data.
    Il faut savoir que WM_COPYDATA ne copie pas vraiement ton struct depuis la mémoire d'un processus vers la mémoire de l'autre, j'ignore comment procède Windows mais il assure au moins l'accès en lecture juste le temps nécessaire, c'est d'ailleurs pour cela que c'est un message bloquant

    ton pData est théoriquement dans l'espace mémoire de l'appelant, le receveur n'a pas le "droit" de lire cette zone, c'est le WM_COPYDATA qui fait en sorte que cela fonctionne !


    Pourquoi ne pas utiliser les API Windows !
    Les Pipes
    Les MailSlot
    Le FileMapping
    Ou même du TCP\IP

    Quelques choses de plus universelles !
    C'est un sujet récurrent, je crois qu'il y a eu des tutoriels récents à ce sujet en Delphi, souvent adapté de la MSDN qui te fournira le code C++
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 53
    Points : 40
    Points
    40
    Par défaut
    J'ai déjà essayé avec mailslot mais vraiment lent, parceque dans le pData: Pointer, je transfert une image BGRA depuis Delphi vers c++ apres C++ renvoie vers delphi.
    Donc la fluidité est important.
    Je fait en Visual C++ 2010 et delphi XE2.

    Peut être que j'oriente vers socket c'est plus facile.

    Merci en tout cas.

Discussions similaires

  1. Communication entre applications
    Par StormimOn dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 04/06/2007, 14h27
  2. [C#] Communication entre applications ?
    Par fmichael dans le forum C#
    Réponses: 10
    Dernier message: 02/03/2007, 08h30
  3. communication entre application.
    Par clucky dans le forum Langage
    Réponses: 1
    Dernier message: 10/10/2006, 10h10
  4. Réponses: 7
    Dernier message: 12/05/2006, 08h36
  5. [COM | VB] communication entre application hétérogène
    Par zlavock dans le forum Général Java
    Réponses: 8
    Dernier message: 21/11/2004, 10h51

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