加载动态库并使用库内函数
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 在运行时创建委托
在 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 在运行时创建委托