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

C++ Discussion :

[DLL]


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Mars 2002
    Messages : 56
    Points : 63
    Points
    63
    Par défaut [DLL]
    bonjour,

    j'ai cette fonction en c++:

    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
     
    ASC_initializeNetwork(T_ASC_NetworkRole role,  int acceptorPort,
                          int timeout, T_ASC_Network ** network,               unsigned long options)
    {
        const char *mode;
     
        DUL_NETWORKKEY * netkey;
     
     
        OFCondition cond = DUL_InitializeNetwork(mode, &acceptorPort, timeout, DUL_ORDERBIGENDIAN | options, &netkey);
        if (cond.bad()) return cond;
     
        *network = (T_ASC_Network *) malloc(sizeof(T_ASC_Network));
        if (*network == NULL) return EC_MemoryExhausted;
        (*network)->role = role;
        (*network)->acceptorPort = acceptorPort;
        (*network)->network = netkey;
     
        return EC_Normal;
    }
    j'aimerai le proposer en DLL pour d'autre programme, j'aimerai savoir comment je doit faire.

    d'avance merci

  2. #2
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 755
    Points : 10 720
    Points
    10 720
    Billets dans le blog
    3
    Par défaut
    Tu as un post-it consacré à ce sujet.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Mars 2002
    Messages : 56
    Points : 63
    Points
    63
    Par défaut
    Le problème est que tous les exemples que je vois partous montre des fonctions avec des types natifs. Je comment faire pour des int, mais pour la manipulation de struct d'un client à une DLL ( la DLL faisant l'alloc memoire), je n'ai rien trouvé.

    ps : à croire que je suis le seul à vouloir le faire :) :) .

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Ton client est codé en C++ aussi ? Qu'est-ce qui te pose problème avec ta struct, par rapport à un int ?


    PS : il manque un type de retour à ta fonction.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Mars 2002
    Messages : 56
    Points : 63
    Points
    63
    Par défaut
    je viens de trouver une solution qui fonctionne, mais je la comprend pas :

    mon code C++ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Cpp_AllocationStruct(Cpp_Struc ** aCpp_Struc)
    {
      *aCpp_Struc = (Cpp_Struc *) malloc(sizeof(Cpp_Struc));
      (*aCpp_Struc)->Un = 51;
      (*aCpp_Struc)->Deux = new Char[200];
      (*aCpp_Struc)->Deux = "Departement de la marne";
    }
    mon code client (Delphi)

    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
     
     
      Cpp_Struc = record
        Un : Integer;
        Deux : PChar;
      end;
      PCpp_Struc = ^Cpp_Struc;
     
      procedure Cpp_AllocationStruct(aCpp_Struc : PCpp_Struc); stdcall; external cCpp_dLL;
     
     
    procedure TForm1.Button5Click(Sender: TObject);
    var
      lPCpp_Struc  : PCpp_Struc;
    begin
      Edit1.Text := '';
      Edit2.Text := '';
      Cpp_AllocationStruct(@lPCpp_Struc);
      if lPCpp_Struc = nil then
      begin
        ShowMessage('lPCpp_Struc = nil');
        Exit;
      end;
      Edit1.Text := IntToStr((lPCpp_Struc^).Un);
      Edit2.Text := (lPCpp_Struc^).Deux;  
    end;
    si mes souvenir sont bon : Cpp_Struc ** aCpp_Struc ==> pointeur de pointeur de Cpp_Struc.

    or en Delphi, j'ai declaré la même structure , et PCpp_Struc un pointeur sur cette strucutre.

    doit passer l'adresse du pointeur.

    donc je crée un pointeur, et en passant l'adresse, c'est un pointeur sur pointeur ??

    d'avance merci.

  6. #6
    mat.M
    Invité(e)
    Par défaut
    Si tu veux interfacer cette DLL avec Delphi il est peut-être souhaitable de faire une dll ATL/COM cela évite le problème de types( plutôt qu'une dll en C classique )

    doit passer l'adresse du pointeur.

    donc je crée un pointeur, et en passant l'adresse, c'est un pointeur sur pointeur ??

    d'avance merci.
    Pourquoi veux-tu passer un pointeur ????
    Il faut penser modularité une dll ( module en fait ) c'est fait expressément pour cela.
    Il faut essayer d'isoler un max de code dans soit l'exe soit le module et ne passer qu'un minimum de paramêtres .
    Si tu passes des pointeurs ça risque de planter.
    Il faut bien cogiter sur le rôle de la dll

    Ton module/Dll soit il s'occupe d'initialiser le réseau et gérer soit rien du tout.
    Une partie réseau des fonctionnalités dans l'exe et une autre dans la dll ce n'est pas conseillé.
    C'est tout ou rien

Discussions similaires

  1. [CR] Infos sur l'utilisation de dll
    Par step dans le forum SAP Crystal Reports
    Réponses: 11
    Dernier message: 09/08/2002, 12h35
  2. Declarer une dll Delphi ?
    Par DelphiCool dans le forum C++Builder
    Réponses: 2
    Dernier message: 26/07/2002, 11h07
  3. Débug de DLL
    Par Bayard dans le forum C++Builder
    Réponses: 3
    Dernier message: 22/07/2002, 16h08
  4. Equivalent à ExeName pour une DLL
    Par Smortex dans le forum Langage
    Réponses: 7
    Dernier message: 16/07/2002, 22h07
  5. Réponses: 2
    Dernier message: 21/03/2002, 00h01

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