Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2986 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [C#]Utilisation d'une dll c#

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C#]Utilisation d'une dll c#

n°1538690
osok
Posté le 04-04-2007 à 22:09:21  profilanswer
 

Bonjour à tous.
 
Je vous expose mon problème.
J'aimerais faire une dll C# et l'utiliser dans un autre programme (pour mon exemple par un autre programme C#).
 
Donc voici la partie dll:
 
Interface

Code :
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Collections;
  4. using System.Text;
  5. namespace Prototype
  6. {
  7.     interface IEnvoiMail
  8.     {
  9.         void lireLog();
  10.         void envoyerMailAvecCorrespondants(ArrayList liste_correspondant, String message);
  11.        // void envoyerMailAvecCriteres(ArrayList liste_criteres, String message);
  12.        // ArrayList selectionnerCorrespondant();
  13.     }
  14. }


 
 
Implémentation

Code :
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Collections;
  4. using System.Text;
  5. namespace Prototype
  6. {
  7.     class EnvoiMail : IEnvoiMail
  8.     {
  9.         public void lireLog()
  10.         {
  11.             Console.WriteLine("Voici le log..." );
  12.         }
  13.         public void envoyerMailAvecCorrespondants(ArrayList liste_correspondant, String message)
  14.         {
  15.             Console.WriteLine("Le mail \"{0}\" a été envoyé à :", message);
  16.             foreach (object c in liste_correspondant)
  17.                 Console.WriteLine("- {0}",c);
  18.         }
  19.     }
  20. }


 
Je crée ensuite la dll à partir de ces deux fichiers. J'obtient un ma dll (lors de la creation il y a eu 2-3 warnings mais aucune erreur).
 
J'utilise ensuite la dll dans un autre programme et je lance la méthode lireLog().
 

Code :
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Runtime.InteropServices;
  5. namespace UsePrototype
  6. {
  7.     class Program
  8.     {
  9.         [DllImport("test.dll" )]
  10.         public static extern void lireLog();
  11.         static void Main(string[] args)
  12.         {
  13.             lireLog();
  14.         }
  15.     }
  16. }


 
Il importe bien la dll mais il me met l'erreur suivante (lancée par l'appel à lireLog()):
 

Code :
  1. System.EntryPointNotFoundException was unhandled
  2.   Message="Unable to find an entry point named 'lireLog' in DLL 'test.dll'."
  3.   Source="UsePrototype"
  4.   TypeName=""
  5.   StackTrace:
  6.        at UsePrototype.Program.lireLog()
  7.        at UsePrototype.Program.Main(String[] args) in C:\****\Program.cs:line 15
  8.        at System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)
  9.        at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
  10.        at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
  11.        at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
  12.        at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
  13.        at System.Threading.ThreadHelper.ThreadStart()


 
Je suis novice en C# (et en manipulation de dll) donc j'aimerais un pti coup de main.
 
ps: j'aimerais aussi tester cette dll avec java. Apparement il faut utiliser jni. Mais le prob c'est que (d'après mes recherches) il faut générer le .h d'après le prog java puis faire le dll en fonction du nom des methodes du .h. Moi ce que je veux c'est qu'un programme java utilise ma dll sans avoir à la redéfinir (il se demerde comme il veut mais il doit s'adapter à la semantique de ma dll). Vous savez comment faire ca?

mood
Publicité
Posté le 04-04-2007 à 22:09:21  profilanswer
 

n°1538892
Tamahome
⭐⭐⭐⭐⭐
Posté le 05-04-2007 à 12:49:51  profilanswer
 

euh ben deja ca ne se fait pas du tout comme ca...
 
 [DllImport("test.dll" )] <- c'est pour des vieux machins ca, genre des objets com [:spamafote]
 
Toi tu dois ajouter une "référence" à ta DLL dans ton csproj.
 
Achete toi un bouquin, je crois que ca ira plus vite, parce que la il n'y a meme pas les bases pour expliquer quoi que ce soit [:spamafote]

n°1538913
_darkalt3_
Proctopathe
Posté le 05-04-2007 à 13:31:48  profilanswer
 

Même si ca fonctionnait comme ça, il n'y a aucune référence à ta classe EnvoiMail dans ton dllimport; comment veux tu pointer vers la méthode correcte ?


---------------
Töp of the plöp
n°1539037
osok
Posté le 05-04-2007 à 16:02:28  profilanswer
 

Merci à vous deux pour vos réponses.
 
Tout d'abord c'est vrai que je n'ai pas les bases en C# (et donc je sais pas comment utiliser une dll).
Par contre j'ai bien les bases en programmation (notamment objet) et je pense pouvoir comprendre ce que vous pourriez me dire.
 
J'aimerais juste qu'on m'aide à savoir comment on utilise une méthode d'une dll générée. Je veux pas savoir tout sur tout mais juste ca. J'ai recherché sur le net mais je n'y ai trouvé que des informations pas si juste que ca (cf " [DllImport("test.dll" )] " ).
Donc pour m'acheter un bouquin (et accessoirement dépenser 40€) pour juste savoir comment appeller une méthode d'un dll, ca me parait un peu abusé. D'autant que je dois etre au point pour demain soir au plus tard.
 
Donc merci de bien vouloir m'aider à corriger mon code.
 
J'ai rajouté la référence à la dll ds mon projet et viré le DllImport. Le prob c'est qu'il ne reconnait pas IEnvoiMail et lireLog.
 

Code :
  1. static void Main(string[] args)
  2.         {
  3.             object obj;
  4.             obj = new IEnvoiMail();
  5.             obj.lireLog();
  6.         }


n°1539040
_darkalt3_
Proctopathe
Posté le 05-04-2007 à 16:03:48  profilanswer
 

Tu peux pas instancier une interface [:spamafote]
Et c'est quoi ce object ?


---------------
Töp of the plöp
n°1539045
MagicBuzz
Posté le 05-04-2007 à 16:06:54  profilanswer
 

un new sur une interface ?

n°1539047
_darkalt3_
Proctopathe
Posté le 05-04-2007 à 16:08:08  profilanswer
 

Disons que 40€ pour acheter un bouquin parlant de programmation/conception objet ne serait pas inutile alors.


---------------
Töp of the plöp
n°1539085
MagicBuzz
Posté le 05-04-2007 à 16:27:08  profilanswer
 

ben à la limite, même pas. j'ai aucun bouquin sur le C#, je suis une brèe finie, mais voir un new sur une interface ça me fait quand même sauter de ma chaise, tout comme écrire une DLL en .NET puis la réutiliser dans un autre projet me semble particulièrement trivial...
 
msdn, c'est pas fait pour les chiens sans poils.

n°1539113
osok
Posté le 05-04-2007 à 16:59:07  profilanswer
 

Exact ct pas IEnvoiMail mais EnvoiMail.
Enfin le probleme reste le même, je n'arrive pas à acceder à la classe EnvoiMail même en ayant fait une réference sur la dll.
 
Faire une dll .NET puis la réutiliser est sans doute trivial mais je n'y arrive pas. Si vous pouviez m'aider un ti peu ce serait cool.

n°1539126
MagicBuzz
Posté le 05-04-2007 à 17:11:16  profilanswer
 

Crée un projet "Bibliothèque de classes".
=> Ca, c'est ta DLL.
 
Ensuite deux choix : le premier, plus pratique pour le débug et les évolutions : ajoute dans ta solution un nouveau projet "Application Windows". Dans ce nouveau projet, fais "Ajouter références", onglet "projets" et choisi ton projet de ta lib.
 
Autre solution : crée une nouvelle solution, ajouter référence > bouton "parcourir", cherche la sortie (fichier dll) de ton projet de bibliothèque.
 
Et voilà :spamafote:
 
Ensuite, ta lib est accessible dans ton projet comme n'importe quel objet du framework :
 

Code :
  1. using MaLibDll;
  2.  
  3. namespace MonAppli
  4. {
  5.    public class Form1 : Form
  6.    {
  7.        public Form1()
  8.        {
  9.            EnvoiMail em = new EnvoiMail();
  10.        }
  11.    }
  12. }


 
:spamafote:

mood
Publicité
Posté le 05-04-2007 à 17:11:16  profilanswer
 

n°1539142
osok
Posté le 05-04-2007 à 17:53:36  profilanswer
 

Ok j'ai testé les deux et ca marche impec.
Merci beaucoup MagicBuzz!!!
 
Par contre vous savez comment faire en java pour utiliser exactement la même dll (sans utiliser le systeme jni qui redefini la dll)?

n°1539225
Tamahome
⭐⭐⭐⭐⭐
Posté le 05-04-2007 à 20:15:51  profilanswer
 

mon dieu, il te manquait le using :??:


---------------
Hobby eien /人◕ ‿‿ ◕人\
n°2049688
Masterweb9​5800
Posté le 17-01-2011 à 16:51:33  profilanswer
 

Hum...
 
oui c'est ce que j'allais dire...
 
Essai de mettre "using Prototype;"
Ca devrais mieux fonctionner ;)

n°2050240
ov3rflow
Overrage
Posté le 19-01-2011 à 15:34:33  profilanswer
 

Ce up  [:tibo2002]


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [C#]Utilisation d'une dll c#

 

Sujets relatifs
utilisation d'access avec vb 6.0[RESOLU] [SQL] Utilisation de champs dans un case CASE
problème avec l'utilisation d'un StateEdit>>>survol d'un texte avec la souris<<<
Utilisation de Office Web Component (OWC) [auto-résolu]Utilisation de CFile et open ?
[PHP] Utilisation d'une base Mysql sous WAMPUtilisation de flash et le libre est-ce incompatible ?
Utilisation introspectionUtilisation d'ifstream dans une class
Plus de sujets relatifs à : [C#]Utilisation d'une dll c#


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR