加载动态库并使用库内函数

Load dynamic library and use functions inside the library

在 C# 中,我使用外部 dll,使用 loadLibrary,如下所示:

public class Utilities
    [DllImport("kernel32", CharSet= CharSet.Auto, SetLastError=true)]
    private static extern IntPtr LoadLibrary(string librayName);
    [DllImport("kernel32", CharSet= CharSet.Auto, SetLastError=true)]
    private static extern IntPtr GetProcAddress(intPtr hwnd, string procedureName);

    public static LoadAssembliesAndMethods() {
        string mainPath = AppDomain.CurrentDomain.BaseDirectory;
        string path = Path.Combine(mainPath, "MyAssembly.dll");

        IntPtr ptr = LoadLibrary(path);

        // What to do next in order to get all the list of functions/methods/class in the library and use them?

    }

dll 没有 Assembly 的签名(它是第 3 方),所以我做不到

Assebly.LoadFile(path);

我需要获取所有 functions/methods/class 的 dll,并使用其中的一些,使用 C#。

我该怎么做。

没有以编程方式获取非托管库的导出列表的通用方法。

有关详细信息,请参阅 Is there a way to find all the functions exposed by a dll

如果您想列出非托管 dll 中的所有方法,这个 link 可以帮助您:

C# get the list of unmanaged C dll exports

更新:

IntPtr funcaddr = GetProcAddress(Handle,functionName);
YourFunctionDelegate function = 
Marshal.GetDelegateForFunctionPointer(funcaddr,typeof(YourFunctionDelegate )) 
as YourFunctionDelegate ;
function.Invoke(pass here your parameters);

您需要在编码时创建委托或使用 DynamicModules 在运行时创建委托