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

flasher_13 55 Messages postés mercredi 2 février 2005Date d'inscription 2 avril 2012 Dernière intervention - 3 mai 2011 à 09:37 - Dernière réponse : flasher_13 55 Messages postés mercredi 2 février 2005Date d'inscription 2 avril 2012 Dernière intervention
- 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 

10 réponses

Répondre au sujet
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 3 mai 2011 à 22:57
+3
Utile
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 ?
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de f0xi
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 5 mai 2011 à 08:00
+3
Utile
une autre solution:
créer un fichier d’installation avec INNOSETUP ou autre

Jlen
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de jlen100
cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscription 15 décembre 2014 Dernière intervention - 3 mai 2011 à 10:31
0
Utile
Salut,

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

A+


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

Bonne journée
Commenter la réponse de flasher_13
Utilisateur anonyme - 3 mai 2011 à 20:34
0
Utile
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
solilog 273 Messages postés samedi 13 juin 2009Date d'inscription 18 avril 2015 Dernière intervention - 3 mai 2011 à 22:55
0
Utile
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
Caribensila 2671 Messages postés jeudi 15 janvier 2004Date d'inscription 18 janvier 2018 Dernière intervention - 5 mai 2011 à 02:34
0
Utile
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
Caribensila 2671 Messages postés jeudi 15 janvier 2004Date d'inscription 18 janvier 2018 Dernière intervention - 5 mai 2011 à 02:47
0
Utile
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
Utilisateur anonyme - 5 mai 2011 à 13:48
0
Utile
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
flasher_13 55 Messages postés mercredi 2 février 2005Date d'inscription 2 avril 2012 Dernière intervention - 10 mai 2011 à 11:39
0
Utile
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.