【问题标题】:How can I load external DLL while running application?如何在运行应用程序时加载外部 DLL?
【发布时间】:2017-05-02 02:06:27
【问题描述】:

大家好,各位 c# 专业人士,

我想知道如何将外部 DLL 文件作为公共函数动态加载,我可以在我的应用程序中的任何位置调用它。

现在我可以像这样加载 DLL:

[DllImport("Mydll.dll", EntryPoint = "MyFunction", CallingConvention = CallingConvention.StdCall)]
public static extern IntPtr Mydll_Start(int lpContext, int MAXW, int MAXH, StringBuilder VerInfo);

它工作正常,但我需要为不同的线程运行这个 dll 函数的多个实例,例如,有 3 个不同的线程,所有线程必须同时调用相同的函数。 这个 dll 不是为多线程设计的,所以我复制了这个 dll 文件,如“Mydll_1.dll”、“Mydll_2.dll”、“Mydll_3.dll”,并使用不同的函数名称加载 3 次,如“Mydll_Start_1”、“Mydll_Start_2” .

但有时我只需要加载 1 个或 2 个 dll 文件,这取决于我的应用程序运行的条件,所以我想在确定条件时在运行时加载这些不同的 dll 文件。喜欢:

int NeedInstancesOfDLL = 0
// some codes to decide needed DLL counts.
...
// load DLLs dynamically.
for (int i=0; i<NeedInstancesOfDLL; i++)
{
    switch (i)
    {
        case 0:
            [DllImport("Mydll_1.dll", EntryPoint = "MyFunction", CallingConvention = CallingConvention.StdCall)]
             public static extern IntPtr Mydll_Start_1(int lpContext, int MAXW, int MAXH, StringBuilder VerInfo);
            break;
        case 1:
            [DllImport("Mydll_2.dll", EntryPoint = "MyFunction", CallingConvention = CallingConvention.StdCall)]
             public static extern IntPtr Mydll_Start_2(int lpContext, int MAXW, int MAXH, StringBuilder VerInfo);
            break;
        case 2:
            [DllImport("Mydll_3.dll", EntryPoint = "MyFunction", CallingConvention = CallingConvention.StdCall)]
             public static extern IntPtr Mydll_Start_3(int lpContext, int MAXW, int MAXH, StringBuilder VerInfo);
            break;
    }
}

// Now I can call each functions from DLL
var RtnVal = Mydll_Start_1(values, values, values)...

这是我想做的,但我找不到方法。 上面的代码当然是编译器无法理解的。

我的观点是:

  1. 如何在运行应用程序时加载不同的外部 Dll。

  2. 如何在运行时为可运行函数声明这些外部 DLL?

对不起,我的问题似乎很愚蠢,但我真的找不到路。 提前感谢大家的帮助。

【问题讨论】:

    标签: c# .net multithreading dll


    【解决方案1】:

    【讨论】:

    • 感谢您的回复,不过我有一个问题。我的 DLL 里面有 3 个不同的函数,所以每次调用这些函数时我都必须声明这些函数并加载 DLL 和卸载 DLL??
    猜你喜欢
    • 2012-02-15
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2021-09-02
    相关资源
    最近更新 更多