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 :
- using System;
- using System.Collections.Generic;
- using System.Collections;
- using System.Text;
- namespace Prototype
- {
- interface IEnvoiMail
- {
- void lireLog();
- void envoyerMailAvecCorrespondants(ArrayList liste_correspondant, String message);
- // void envoyerMailAvecCriteres(ArrayList liste_criteres, String message);
- // ArrayList selectionnerCorrespondant();
- }
- }
|
Implémentation
Code :
- using System;
- using System.Collections.Generic;
- using System.Collections;
- using System.Text;
- namespace Prototype
- {
- class EnvoiMail : IEnvoiMail
- {
- public void lireLog()
- {
- Console.WriteLine("Voici le log..." );
- }
- public void envoyerMailAvecCorrespondants(ArrayList liste_correspondant, String message)
- {
- Console.WriteLine("Le mail \"{0}\" a été envoyé à :", message);
- foreach (object c in liste_correspondant)
- Console.WriteLine("- {0}",c);
- }
- }
- }
|
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 :
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Runtime.InteropServices;
- namespace UsePrototype
- {
- class Program
- {
- [DllImport("test.dll" )]
- public static extern void lireLog();
- static void Main(string[] args)
- {
- lireLog();
- }
- }
- }
|
Il importe bien la dll mais il me met l'erreur suivante (lancée par l'appel à lireLog()):
Code :
- System.EntryPointNotFoundException was unhandled
- Message="Unable to find an entry point named 'lireLog' in DLL 'test.dll'."
- Source="UsePrototype"
- TypeName=""
- StackTrace:
- at UsePrototype.Program.lireLog()
- at UsePrototype.Program.Main(String[] args) in C:\****\Program.cs:line 15
- at System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)
- at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
- at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
- at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
- at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
- 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?