C# à l'Aide de l'Assemblée pour appeler une méthode dans une DLL
J'ai lu beaucoup à ce sujet - je me sens comme je suis très proche de la réponse. Je suis simplement à la recherche d'appeler une méthode à partir de l'intérieur d'un fichier dll que j'ai créé.
Pour les fins de l'exemple:
Mon Fichier DLL:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ExampleDLL
{
class Program
{
static void Main(string[] args)
{
System.Windows.Forms.MessageBox.Show(args[0]);
}
public void myVoid(string foo)
{
System.Windows.Forms.MessageBox.Show(foo);
}
}
}
Ma Demande:
string filename = @"C:\Test.dll";
Assembly SampleAssembly;
SampleAssembly = Assembly.LoadFrom(filename);
//Obtain a reference to a method known to exist in assembly.
MethodInfo Method = SampleAssembly.GetTypes()[0].GetMethod("myVoid");
//Obtain a reference to the parameters collection of the MethodInfo instance.
Tous les crédits vont à, de SORTE que l'utilisateur "woohoo" pour l'extrait ci-dessus
Comment appeler un Gérés Fichier DLL en C#?
Maintenant, cependant, je voudrais être capable de ne pas uniquement faire référence à ma Dll (et les méthodes à l'intérieur), mais bien d'appeler les méthodes à l'intérieur de celui-ci (dans ce cas, je tiens à appeler la méthode 'myVoid').
Pourrait que quelqu'un a des suggestions pour moi?
Merci,
Evan
Pourquoi ne pas ajouter sa référence à votre demande ?
Parce que l'OP pourriez vouloir inclure uniquement la DLL si l'utilisateur a des droits à cette fonctionnalité. Un ajout d'une référence est pour toujours livrés avec l'application.
Parce que l'OP pourriez vouloir inclure uniquement la DLL si l'utilisateur a des droits à cette fonctionnalité. Un ajout d'une référence est pour toujours livrés avec l'application.
OriginalL'auteur | 2011-07-31
Vous devez vous connecter pour publier un commentaire.
La question et la réponse vous la référence est à l'aide de la réflexion à l'appel de la méthode dans la gestion de la DLL. Ce n'est pas nécessaire si, comme vous dites que vous voulez faire, il vous suffit de faire référence à votre DLL. Ajouter la référence (via l'Ajout de la Référence option dans Visual Studio), et vous pouvez appeler votre méthode directement comme ceci:
Si vous voulez aller à la réflexion route (donnée par
woohoo
), vous avez encore besoin d'une instance de votreProgram
classe.Maintenant, vous avez une instance de
Program
et peut appelermyVoid
.Lisez la documentation pour MethodInfo.Invoquer.
merci de me rappeler à lire la documentation 🙂 mais je me demande comment appeler myvoid méthode sans donner de paramètres, il doit être objet result = méthode.Invoke( null, paramètres );
Que ferait appel
myVoid
comme une méthode statique avec les paramètresparameters
. Probablement donner un tableau vide pour les paramètres est très bien, mais j'aime en tenir à la lettre de la documentation.Ferreira un peu Comme un suivi à ma question initiale, (vous m'a vraiment fait réfléchir ici), serait-il possible de chiffrer mon fichier dll avant de l'ajouter comme une référence à mon projet; ensuite, le chargement de la dll de données comme un objet, un décryptage de ces données, et être encore capable d'appeler les méthodes à l'intérieur de celui-ci?
OriginalL'auteur Matthew Ferreira
OriginalL'auteur Damith
Il suffit d'ajouter cette ligne de code après l'obtention de référence à votre méthode.
Espérons que cette aide.
null
lorsqu'une méthode ne prend pas de paramètres. EDIT: encore envisager l'adoption d'null
que c'est ce que les états de documentation.Je sais que, Peut-être que j'ai eu à l'expliquer plus en détail.
OriginalL'auteur saber
MethodInfo a une méthode appelée Invoquer.
Donc appelez simplement
Method.Invoke()
avec un objet que vous avez créé, par exemple, en appelantSystem.Activator.CreateInstance()
OriginalL'auteur Sylence