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

Free Pascal Discussion :

Faire une DLL pour Free Pascal avec MinGW [Free Pascal]


Sujet :

Free Pascal

  1. #1
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut Faire une DLL pour Free Pascal avec MinGW
    Bonjour !

    Je voudrais faire une DLL avec MinGW, qui soit utilisable dans un programme Free Pascal. Voici le modèle actuel de ma DLL, avec un programme de test (en C) et un script pour compiler le tout :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    /* mydll.c */
     
    #include <string.h>
     
    __declspec(dllexport) int __cdecl MaFonction(char ch[])
    {
      return strlen(ch);
    }

    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
    /* usemydll.c */
     
    #include <stdlib.h>
    #include <stdio.h>
     
    __declspec(dllimport) int __cdecl MaFonction(char ch[]);
     
    int main(int argc, char** argv)
    {
      char c[] = "";
     
      printf("%d\n", MaFonction(c));
     
      return EXIT_SUCCESS;
    }

    Code BAT : 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
    @echo off
     
    rem build-all.cmd
     
    for %%f in (*.dll *.exe *.o) do del %%f
     
    set path=c:\mingw\bin
    set dll=mydll
    set exe=usemydll
     
    rem http://www.transmissionzero.co.uk/computing/building-dlls-with-mingw/
     
    gcc.exe -c -o %dll%.o %dll%.c
    gcc.exe -o %dll%.dll -s -shared %dll%.o -Wl,--subsystem,windows
     
    gcc.exe -c -o %exe%.o %exe%.c
    gcc.exe -o %exe%.exe -s %exe%.o -L. -l%dll%
     
    call %exe%
     
    pause

    A votre avis, cette DLL est-elle utilisable avec Free Pascal ? Avec quel code ?
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  2. #2
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Je viens de réaliser que j'avais moi-même posté un exemple (dont je n'étais pas l'auteur) dans le forum il y a quelques mois.

    Je m'en suis inspiré pour faire le code suivant, qui semble fonctionner :

    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
     
    program usemydll;
    {$APPTYPE CONSOLE}
    {$MODE DELPHI}
     
    uses
      Windows, SysUtils;
     
    type
      TFunction = function(c: pchar): integer; cdecl;
     
    const
      CFunction: TFunction = nil;
     
    var
      dllHandle: THandle;
      arg: array[0..255] of char;
     
    begin
      dllHandle := LoadLibrary('mydll.dll');
      if dllHandle <> 0 then
      begin
        @CFunction := GetProcAddress(dllHandle, 'MaFonction');
     
        StrPCopy(arg, 'abc');
        WriteLn(CFunction(@arg));
     
        FreeLibrary(dllHandle);
        ReadLn;
      end;
    end.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

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

Discussions similaires

  1. [Free Pascal] Une nouvelle plateforme pour Free Pascal : la console Wii
    Par Alcatîz dans le forum Free Pascal
    Réponses: 1
    Dernier message: 20/03/2011, 23h21
  2. compiler du vba pour faire une dll (ou equivalent)
    Par emmesse2 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 24/11/2008, 10h09
  3. [VC++] Utilisation d'une DLL écrite en C++ avec mingw.
    Par swirtel dans le forum Visual C++
    Réponses: 1
    Dernier message: 20/06/2007, 10h42
  4. [VB.net] Probleme avec une dll pour l'enregistrer
    Par Diablo_22 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 09/08/2006, 20h41

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