begin process at 2010 02 10 06:11:52
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C#

 > 

Archives

 > 

.NET

 > 

[.Net] Création de DLL "croisées" -- Liaison tardive


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

[.Net] Création de DLL "croisées" -- Liaison tardive

jeudi 18 août 2005 à 19:11:04 | [.Net] Création de DLL "croisées" -- Liaison tardive

Atmaweapon

Bonjour à tous !
Suite au problème évoqué ici (pour les plus courageux... vous n'êtes cependant pas obligé de "lire" puisque je vais réexposer le probleme) : http://www.csharpfr.com/forum.v2.aspx?ID=538189
j'ai décidé de me tourner vers la liaison tardive.

Rapidemlent, le contexte :
J'ai deux ensembles de classes avec des dépendances entre eux (dans les 2 sens) et j'aimerais créer deux dll différentes pour ces 2 ensembles.
L'une des solutions évoquées dans le topic ci-dessus consiste à utiliser la réflexion et les liaisons tardives pour créer la première dll (après, pour la deuxième, c'est "facile" puisqu'il suffit d'importer la première :))
Le problème est que je ne sais pas trop comment faire cette liaison tardive... J'ai trouvé ici : http://www.c-sharpcorner.com/Code/2003/Oct/LateBindingWithReflection.asp quelque chose qui me paraît très intéressant... cependant ils ont l'air de charger l'assembly à partir d'une dll ... Or c'est cette que je chercher à CREER (donc je ne peux l'avoir sous la main avant de l'avoir créé ^^)

Ce que j'aimerais en fait, c'est savoir s'il serait possible de "compiler et utiliser" un fichier .cs :)
Je pense que si j'arrivais à faire ça, je pourrais m'en sortir avec mes liaisons tardives ^^

Merci d'avance :)

jeudi 18 août 2005 à 23:21:13 | Re : [.Net] Création de DLL "croisées" -- Liaison tardive

Lutinore

Administrateur CodeS-SourceS

On s'est mal compris ( encore ), quand je parlais de la réflexion c'etait pour appeler une méthode avec "un lien tardif" pas pour créer un assembly dynamiquement. La réflexion permet d'appeler une méthode juste en disposant de son nom ainsi à la compilation ta librarie n'a plus de dépendance avec la seconde, est-ce-que ca semble pouvoir résoudre ton problème ? je remet le petit résumé de l'autre post:

1 ) Charger l'assembly.
2 ) Chercher la méthode dans l'assembly.
3 ) Créer une instance de la classe si la méthode n'est pas static.
4 ) Appeler la méthode.

vendredi 19 août 2005 à 04:40:05 | Re : [.Net] Création de DLL "croisées" -- Liaison tardive

Lutinore

Administrateur CodeS-SourceS

Voilà un exemple minimaliste de lien tardif pour appeler une méthode:




class App
{
   private const string ASSEMBLY_NAME = "MyLib.dll";
   private const string CLASS_NAME = "MyLib.MyClass";
   private const string METHOD_NAME = "MyMethod";

   [
STAThread ]
   private static void Main( )
   {
      try
      {
         // On Charge l'assembly.
         Assembly assembly = Assembly.LoadFrom( ASSEMBLY_NAME );
         // On obtient la classe.
         Type type = assembly.GetType( CLASS_NAME );
         // On obtient la méthode.
         MethodInfo method = type.GetMethod( METHOD_NAME );
         // On créer l'objet.
         object target = Activator.CreateInstance( type );
         // On appele la méthode.
         string s = ( string )method.Invoke( target, new object[ ] { "Hello World" } );

         /* Autre technique pour appeler la méthode.
         string s = ( string )type.InvokeMember
         (
            METHOD_NAME,
            BindingFlags.InvokeMethod,
            null,
            target,
            new object[ ] { "Hello World" }
         );
         */

         Console.WriteLine( s );
         Console.ReadLine( );

      }
      catch ( Exception ex )
      {
         Console.WriteLine( ex.ToString( ) );
      }
   }
}

vendredi 19 août 2005 à 09:22:18 | Re : [.Net] Création de DLL "croisées" -- Liaison tardive

sebmafate

Membre Club Administrateur CodeS-SourceS
la méthode de Lutinore fonctionne parfaitement... malheureusement, le repproche c'est qu'à la compilation de ton appli tu dois connaître le nom de la méthode que tu appelles ainsi que ces paramètres.

Je suis en train de voir pour te faire une source exploitant l'idée des plugins, ca te permet de charger dynamiquement une assembly et de l'appeler sans la connaître... puisqu'elle implémente une interface


Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
vendredi 19 août 2005 à 09:41:54 | Re : [.Net] Création de DLL "croisées" -- Liaison tardive

Atmaweapon

oki merci beaucoup ^_^

Cela dit j'ai trouvé ma "solution" qui en fait était vraiment toute conne (mais je pense qu'elle ne marche que dans les cas "simples" où on a pas trop trop de dépendances entre les 2 assembly :
- dans l'assembly présentant le plus petit nombre de dépendances (on appellera cet assembly l'assembly A) vers l'autre assembly (... et celui la l'assembly B), on "commente" toutes ces dépendances, et on compile une DLL A.dll
- On importe la DLL A.dll dans l'assembly B, les dépendances sont donc disponibles, on compile la DLL B.dll
- On importe la DLL B.dll dans l'assembly A, les dépendances sont donc disponibles, on peut décommenter nos lignes et recompiler la DLL A.dll :p

Bon maintenant, si une des méthodes appelées d'une DLL à l'autre vient à changer, faut "s'amuser" à refaire la p'tite manip ci-dessus...
(mais je pense qu'on a le meme problème avec la liaison tardive ^^)

merci a Lutinore : j'avais bien compris que c'était comme ca qu'il fallait procéder (c'est ce qui est décrit dans l'url que j'avais donné si je ne m'abuse) mais je viens de m'apercevoir que ce que je me suis planté lorsque je me suis dit "mais ils utilisent une dll que justement je cherche a créer" : on l'utilise en effet dans le code mais, au départ, c'est vrai qu'elle n'a pas besoin d'exister...

Merci en tous cas :)
et Seb, je reste ouvert a ta solution de plugins =) (si ca ne t'embete pas hein ^^) ... je suis relativement ouverts aux solutions les plus "propres" généralement :)



Cette discussion est classée dans : net, dll, création, liaison, tardive


Répondre à ce message

Sujets en rapport avec ce message

[C#.NET] création d'une DLL [ par by_litch ] Bonjour à tous,j'ai fini mon projet, ou à peu près, et je voudrais à présent créer une dll, mais là, catastrophe... lolEn faite j'ai une feuille class [C#] Création d'une DLL ou EXE avec icones [ par linuxludo ] Bonjour a tous ! J' ai développé une appli, et je voudrais a present concevoir une dll (ou intégrer a l'exe, a voir) qui contient les icones de cet ap Comportement d'un interop C++/C# différent en fonction du framework .NET [ par zibist ] Bonjour, Je travaille actuellement sur un projet pour migrer un programme de VB en .NET et je rencontre un problème qui semble venir de la version du liaison tardive[prob] [ par je2fb ] Bonjour,Je suis entrain de developper un Client OPC qui utilise une librairie en C#, j'ai une fonction Connect (je donne le code) :        Type typeof [DEPLACE] Problème compilation du sript ASP.net en C# [ par fabien074 ] Lorsque je compile mon code ASP.net (écrit en C#), j'obtiens les erreurs suivantes sauf que le fichier où l'on me dit qu'il y a les erreurs je ne le t Architecture logicielle C# .NET WPF DLL [ par jon_private ] Bonjour à tous, Je suis actuellement en train de travailler sur un projet, et j'aimerais avoir l'avis d'experts sur l'architecture que je souhaite me gdcm [ par Bidou ] Bonjour,J'essaye d'utiliser la libraire gdcm (qui est open source) qui est écrite en c++.Un wrapper C# a cependant vu le jour, et c'est ce qui m'intér express2008 création dll usercontrol [ par terrible ] bonsoir, j'ai créé un template pour developper sous express#2008 des usercontrol lorsque j'appelle mon modèle pour développer des usercontrol je n'ai création d'une dll usercontrol WPF sous express2008 [ par terrible ] bonsoir, j'ai créé un template pour développer sous express#2008 des usercontrol en wpf lorsque j'appelle mon modèle pour développer des usercontrol j création dll [ par mohamed_bn ] med belhassenj'ai un programme contenant plusieurs fonctions. j'aime créer un dll rassemblant tous ces fonctions pour rendre le code plus lisible.j'ai


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,515 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales