*** Importer une DLL dans son projet - HELP ME - *** [Résolu]

Messages postés
55
Date d'inscription
mercredi 2 février 2005
Dernière intervention
2 avril 2012
- - Dernière réponse : flasher_13
Messages postés
55
Date d'inscription
mercredi 2 février 2005
Dernière intervention
2 avril 2012
- 10 mai 2011 à 11:39
Bonjour à tous, ma demande est simple, je voudrais seulement intégrer une DLL à mon projet delphi pour que l'exécutable soit exportable.

Quand je fait: Projet -> Importer -> RSCOM.dll j'ai ce message d'erreur:


Et si je compile quand même avec RSCOM.dll tronqué dans mon projet j'ai ce message d'erreur lorsque je lance FAVTEST.exe sans RSCOM.dll dans un dossier quelconque:


J'espère avoir était compris et clair,

merci par avance aux delphinois
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
Messages postés
4304
Date d'inscription
samedi 16 octobre 2004
Dernière intervention
9 mars 2018
3
Merci
voici la solution :

telecharger mon unité LibLoader :
http://www.delphifr.com/codes/DYNAMIC-LIBRARY-LOADER-CLASS-GAGNEZ-TEMPS-CHARGER-FONCTIONS_51158.aspx

cette unité contient une Classe (TLibraryLoader) qui permet de charger rapidement sans surplus de code des DLL dans un programme, PUR esprit RAD.

ensuite le fichier RC (TestDLL.rc compilé en TestDLL.dres) :
MADLL RCDATA "MaDLL.dll"


puis le contenus de la dll de test (MaDLL.dll) :
library MaDLL;

uses
  SysUtils,
  Classes;

{$R *.res}

function Test:extended; stdcall;
begin
  result := Pi * 2;
end;

exports Test;

begin
end.



et finalement le contenus du fichier du programme (TestDLL) :
unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm2 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
  public
  end;


var
  Form2: TForm2;

{ library }
  Test : function:Extended; stdcall;


implementation

{$R *.dfm}
{$R *.dres} // inclusion du fichier ressource customisé

{ on utilise LibLoader }
uses LibLoader;

{ deux variables nécessaires au fonctionnement }
var
  LibFileName   : string;         // MaDLL Lib FileName
  LibraryLoader : TLibraryLoader; // chargeur de librairie



{ ici, un simple test d'appel de la fonction Test de MaDLL, doit renvoyer Pi*2 }
procedure TForm2.FormCreate(Sender: TObject);
begin
  caption :format('Test %.9f /// 2xPi = %.9f',[Test, 2*Pi]);
end;




{ attention bien suivre ici }

{ zone initialisation de l'unité, chargée OBLIGATOIREMENT au lancement du programme }
initialization
  // on crée un chemin vers la DLL (ici repertoire temporaire de l'utilisateur)
  LibFileName := includeTrailingBackSlash(getEnvironmentVariable('TEMP'))+'MaDLL.dll';

  // on crée un flux de ressource sur la ressource MADLL incluse donc dans le programme
  with TResourceStream.Create(0, 'MADLL', RT_RCDATA) do
  try
    // on sauvegarde dans le dossier des fichiers temporaires
    SaveToFile(LibFileName);
  finally
    Free;
  end;

  // on crée le chargeur de librairie
  LibraryLoader := TLibraryLoader.Create(LibFileName);

  // la DLL existe ? alors
  if LibraryLoader.Load then
  begin
    // on charge la fonction Test
    LibraryLoader.GetProc('Test', @Test);

    // on doit avoir 1 succé de chargement sinon y'a un probleme
    // on pourrait également poser un ASSERT pour stopper le programme
    if LibraryLoader.ProcSuccessCount <> 1 then
      MessageDLG('Erreur d''appel à la librairie...', mtError, [mbOk], 0);
  end;

{ zone de finalisation de l'unité, chargée OBLIGATOIREMENT à la fin du programme }
finalization
  // la libération du chargeur libère tout lui même ressources occupées, librairies chargées
  LibraryLoader.Free;

end.


________________________________________________________
besoin de câbles audio, vidèo, informatique pas cher ?

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de f0xi
Messages postés
1651
Date d'inscription
samedi 10 juillet 2004
Dernière intervention
25 juillet 2014
3
Merci
une autre solution:
créer un fichier d’installation avec INNOSETUP ou autre

Jlen

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de jlen100
Messages postés
2233
Date d'inscription
mardi 10 décembre 2002
Dernière intervention
15 décembre 2014
0
Merci
Salut,

ce n' est pas possible à ma connaissance ...

A+


Composants Cindy pour Delphi
Commenter la réponse de cs_MAURICIO
Messages postés
55
Date d'inscription
mercredi 2 février 2005
Dernière intervention
2 avril 2012
0
Merci
Merci beaucoup pour votre réponse rapide , je m'en doutais un peu...

Bonne journée
Commenter la réponse de flasher_13
0
Merci
Salut

Je ne comprends pas très bien ta question : Tu souhaites faire de ton projet et de ta DLL un seul et meme executable ?

Pourquoi ne pas mettre ta DLL en ressource ?

Par contre quelle version de Delphi utilises tu car Projet -> Importer -> RSCOM.dll moi j'ai pas (D6 et D7)
Commenter la réponse de Utilisateur anonyme
Messages postés
273
Date d'inscription
samedi 13 juin 2009
Dernière intervention
18 avril 2015
0
Merci
Bonsoir
on va tous s'y mettre...
1 - Si tu veux appeler des fonctions qui sont dans une DLL, tu declare ta fonction dans ton unit delphi:

function ma_fonction(p1, p2:integer;pch:pchar): integer;
external 'nom_dll.dll';
stdcall; // conseillé si DLL en C ou C++
la DLL doit être dans un des rep système ou dans le rep de l'exe.
tu dois connaitre le nom de la fonction et ses param et sa val de retour.


2 - si tu veux créer une DLL:
tu crées un projet de type 'library'
elle contiendra des unit, des forms si tu veux,
et une (ou plusieurs) fonctions 'export' qui seront les points d'entrée.

Salut.
Commenter la réponse de solilog
Messages postés
2684
Date d'inscription
jeudi 15 janvier 2004
Dernière intervention
26 juillet 2018
0
Merci
Salut,

Comme Francky, je mettrais la DLL en ressource ou à la fin du fichier .exe et je l'installerais quand besoin...

D'un autre côté, je ne pense pas que ce soit la vocation d'une DLL d'être ainsi liée à une application particulière.

Mais j'ai sans doute zapper un truc...


_______________________________________
Soutenez Wikimédia France aujourd'hui : http://dons.wikimedia.fr
Commenter la réponse de Caribensila
Messages postés
2684
Date d'inscription
jeudi 15 janvier 2004
Dernière intervention
26 juillet 2018
0
Merci
Oué. J'ai zappé zapper qui doit être zappé et non zapper.


_______________________________________
Soutenez Wikimédia France aujourd'hui : http://dons.wikimedia.fr
Commenter la réponse de Caribensila
0
Merci
Sinon il peut faire un stub aussi mais autant utiliser les ressources : cela revient au même et c'est plus facile à mettre en place
Commenter la réponse de Utilisateur anonyme
Messages postés
55
Date d'inscription
mercredi 2 février 2005
Dernière intervention
2 avril 2012
0
Merci
Merci à tous pour vos réponses, j'ai penser à faire un fichier setup qui installe le petit soft avec la DLL sur la machine.

Je développe sur Delphi 7 édition personnel et je vais tester la solution de f0xi qui m'a l'air pas mal du tout, merci encore!

A+
Commenter la réponse de flasher_13

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.