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

Delphi Discussion :

[D7][idée?]transmettre une string d'une dll à un prog ?


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 190
    Par défaut [D7][idée?]transmettre une string d'une dll à un prog ?
    Bonjour.

    Depuis quelques semaines déjà, j'essaye de faire en sorte qu'une application (une dll sans interface graphique) puisse transmettre à un progamme indépendant des informations sous chaine de caractère. Lorsque l'information à transmettre est de type numérique, les messages windows sont parfaitement adaptés, mais là, lorsqu'il s'agit de chaines, je galère et je piétine.
    Avez-vous des idées ?

    J'ai essayé plusieurs solutions, mais aucune n'est véritablement satisfaisante.

    Need Help

    jbat

  2. #2
    Expert confirmé
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Par défaut
    Salut

    Tu as regardé dans la FAQ ?
    http://delphi.developpez.com/faq/?pa...nededllversapp

    @+

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 190
    Par défaut
    L'utilisation des ATOMs semble intéressante, mais à l'essai, j'ai rencontré des problèmes étranges...

    Je préfèrerai utiliser le message WM_COPY_DATA.

    Voici ce que j'ai essayé :

    Emetteur (une dll utilisant des threads et sans interface ni objet dérivant de TWinControl)
    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
    function TGlobal.RI_SendStringWindowMessage(iRio : integer ; sMsg, sRecepteur: string ; h : thandle):integer;
        var
            DataEnvoyes:TDataEnvoyes;
            CopyDataStruct:TCopyDataStruct;
        begin
     
            result := -1 ;
            if(h=0)then
            begin
                m_h:=FindWindow(nil,PChar(sRecepteur));
            end
            else
            begin
                m_h := h ;
            end;
     
            with DataEnvoyes do
            begin
                m_sChaine := sMsg ;
                m_iRio := iRio ;
                m_iTraitee := 0 ; // non traité.
            end;
            CopyDataStruct.cbData:=SizeOf(DataEnvoyes); //taille des données à envoyer
            CopyDataStruct.lpData:=@DataEnvoyes; //adresse de nos données à envoyer
     
            SendMessage(m_h,WM_COPYDATA,0,LongInt(@CopyDataStruct));
     
        end;
    Recepteur (une application windows tout ce qu'il y a de plus simple)
    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
    procedure TForm1.RunCopyDataMessage(var Msg: TMessage);
        type
            TPCopyDataStruct=^TCopyDataStruct;
            TPDataEnvoyes=^TDataEnvoyes;
        Var
            DataEnvoyes:TDataEnvoyes;
            PDataEnvoyes:TPDataEnvoyes;
            PCopyDataStruct:TPCopyDataStruct;
            iCpt : integer ;
            sChaine : string ;
        begin
            PCopyDataStruct:=TPCopyDataStruct(msg.LParam);
            PDataEnvoyes:=PCopyDataStruct^.lpData;
            DataEnvoyes:=PDataEnvoyes^; // <= PLANTAGE
            ShowMessage(DataEnvoyes.m_sChaine);
        end;
    Je ne comprends pas pourquoi ça plante

  4. #4
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 190
    Par défaut
    Citation Envoyé par jbat
    Je ne comprends pas pourquoi ça plante
    Personne ne sais ? J'ai du faire une erreur bête, mais je ne vois vraiment pas...

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 190
    Par défaut
    Réponse probable :

    Dans la structure que vous envoyez (celle dont vous donnez l'adresse dans lpData), ne mettez pas de string, mais plutôt un tableau de caractères...

    En tout cas, maintenant, ça fonctionne mieux...

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  2. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  3. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48
  4. [C#] Comment Splitter une string avec une string ?
    Par ADJ Design dans le forum C#
    Réponses: 12
    Dernier message: 27/07/2006, 12h10
  5. Conseil sur l'extraction d'une string dans une string
    Par Mickey.jet dans le forum Delphi
    Réponses: 3
    Dernier message: 02/06/2006, 14h54

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