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

Langage Delphi Discussion :

[D7] Création et utilsation de dll


Sujet :

Langage Delphi

  1. #1
    Membre actif Avatar de oneDev
    Homme Profil pro
    dilettant
    Inscrit en
    Mars 2019
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : dilettant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2019
    Messages : 213
    Points : 222
    Points
    222
    Par défaut [D7] Création et utilsation de dll
    Bonjour,

    Je teste actuellement la création et l'utilisation de dll avec Delphi 7.
    Je me suis inspiré de ce tuto.
    J'ai créé le projet suivant :

    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
    library MaLibrary;
     
    uses
      SysUtils,
      Classes,
      StrUtils;
     
    {$R *.res}
     
    function Factorielle(n: Integer): Integer; stdcall; export;
    begin
      if (n = 0) then
        Result := 1
      else
        Result := n * Factorielle(n-1);
    end;
     
    function StrToUpper(const str: string): string; stdcall; export;
    begin
      Result := UpperCase(str);
    end;
     
    exports
      Factorielle,
      StrToUpper;
     
    begin
    end.
    Cela me crée une dll.

    J'ai ensuite un projet de test dans lequel je place ma dll.
    L'unité principale fait simplement ceci :

    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
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;
     
    type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;       
     
    function Factorielle(n: Integer): Integer; stdcall; external 'MaLibrary.dll';
    function StrToUpper(const str: string): string; stdcall; external 'MaLibrary.dll';
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Caption := StrToUpper(Caption);
    end;
     
    end.
    Au lancement de cette application, j'ai l'erreur "Opération de pointer incorrecte".

    Pouvez-vous m'aider à corriger ce qui ne va pas, je ne trouve pas.

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    tu n'as pas lu ce chapitre
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre actif Avatar de oneDev
    Homme Profil pro
    dilettant
    Inscrit en
    Mars 2019
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : dilettant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2019
    Messages : 213
    Points : 222
    Points
    222
    Par défaut
    Effectivement, je n'en étais pas encore à ce chapitre.
    Par contre, même la première fonction qui manipule uniquement des Integer provoque la même erreur.

  4. #4
    Membre actif Avatar de oneDev
    Homme Profil pro
    dilettant
    Inscrit en
    Mars 2019
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : dilettant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2019
    Messages : 213
    Points : 222
    Points
    222
    Par défaut
    Avec des shortstring, cela fonctionne.
    Merci

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 452
    Points : 24 863
    Points
    24 863
    Par défaut
    Citation Envoyé par oneDev Voir le message
    Par contre, même la première fonction qui manipule uniquement des Integer provoque la même erreur.
    On s'attendrait plutôt à une erreur EStackOverflow avec cette fonction factorielle avec un nombre trop élevé.


    Le Shortstring sera potentiellement moins portable, une DLL utilisé par un autre langage, privilégiez le PChar ou le BSTR OLE (WideString)

    Avec D7, donc Win32 uniquement, idem si l'on veut rendre a DLL portable, mieux vaut utiliser les types Windows comme DWORD (Cardinal) et INT32 (Integer) pour que les utilisateurs puissent utiliser comme référentiel de type ceux de Windows.pas : https://learn.microsoft.com/fr-fr/wi...ows-data-types
    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

  6. #6
    Membre actif Avatar de oneDev
    Homme Profil pro
    dilettant
    Inscrit en
    Mars 2019
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : dilettant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2019
    Messages : 213
    Points : 222
    Points
    222
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    On s'attendrait plutôt à une erreur EStackOverflow avec cette fonction factorielle avec un nombre trop élevé.


    Le Shortstring sera potentiellement moins portable, une DLL utilisé par un autre langage, privilégiez le PChar ou le BSTR OLE (WideString)

    Avec D7, donc Win32 uniquement, idem si l'on veut rendre a DLL portable, mieux vaut utiliser les types Windows comme DWORD (Cardinal) et INT32 (Integer) pour que les utilisateurs puissent utiliser comme référentiel de type ceux de Windows.pas : https://learn.microsoft.com/fr-fr/wi...ows-data-types
    Actuellement ce sont juste des tests avant la mise en place de d'un vrai système.
    Merci de tes précisions, je vais regarder tout ça.

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

Discussions similaires

  1. [PB 10.5] Création et utilisation de DLL Powerbuilder
    Par Kalini dans le forum Powerbuilder
    Réponses: 0
    Dernier message: 07/09/2007, 12h21
  2. Réponses: 6
    Dernier message: 07/06/2007, 22h03
  3. création d'un assembly(dll)
    Par barhili04 dans le forum C#
    Réponses: 4
    Dernier message: 28/05/2007, 18h11
  4. Création de fonctions dans DLL
    Par salrouge dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 23/08/2006, 09h42
  5. Réponses: 3
    Dernier message: 07/04/2006, 11h27

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