Реализация плагина с помощью C # - PullRequest
0 голосов
/ 17 декабря 2010

Мне нужно вызвать функцию для вызова dll пользователя в C #.

Например, когда пользователь создает файл abc.dll с классом ABC, я хочу загрузить dll для запуска методов xyz (a) в классе.

object plugInObject = node.GetPlugInObject("abc.dll", "ABC");
plugInObject.runMethod("xyz", "a");

Как я могу реализовать эти функции в C #?

ДОБАВЛЕНО

Это код плагина, а dll копируется как plugin / plugin.dll.

namespace HIR
{
    public class PlugIn
    {
        public int Add(int x, int y)
        {
            return (x + y);
        }
    }
}

Это тот, кто вызывает этот плагин.

using System;
using System.Reflection;

class UsePlugIn
{
    public static void Main() 
    {
        Assembly asm = Assembly.LoadFile("./plugin/plugin.dll");
        Type plugInType = asm.GetType("HIR.PlugIn");
        Object plugInObj = Activator.CreateInstance(plugInType);

        var res = plugInType.GetMethod("Add").Invoke(plugInObj, new Object[] { 10, 20 });
        Console.WriteLine(res);
    }
}

Ответы [ 2 ]

2 голосов
/ 17 декабря 2010

Это может быть переведено в C # и .NET на следующее:

Assembly asm = Assembly.LoadFile("ABC.dll");
Type plugInType = asm.GetType("ABC");
Object plugInObj = Activator.CreateInstance(plugInType);

plugInType.GetMethod("xyz").Invoke(plugInObj, new Object[] { "a" });

Называется Reflection.

0 голосов
/ 17 декабря 2010
* Declare the method with the static and extern C# keywords.
* Attach the DllImport attribute to the method. The DllImport attribute allows you to specify the name of the DLL that contains the method. The common practice is to name the C# method the same as the exported method, but you can also use a different name for the C# method.
* Optionally, specify custom marshaling information for the method's parameters and return value, which will override the .NET Framework default marshaling.

//Example of how to use methods from User32.dll
[DllImport("User32.dll", SetLastError=true)]
static extern Boolean MessageBeep(UInt32 beepType);

см. для получения более подробной информации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...