.net - .NET PInvoke 能否从用户指定的目录动态加载 native dll?

标签 .net directory pinvoke native loadlibrary

我有一个 .NET 应用程序,需要加载一个本地库,其位置由用户指定。 PInvoke 看起来只会从全局搜索路径(或在编译时指定的路径?)加载。最好的方法是创建一个在运行时调用 LoadLibrary 的 C++/CLI 程序集吗?

C++/CLI 会比 C# PInvoking LoadLibrary 更简单吗?

最佳答案

如果您已经有一个 C#/VB.Net 项目,那么只需 PInvoke LoadLibrary 即可加载 DLL 会简单得多。它需要从现有的 dll 中进行一次快速的 PInvoke 调用

public partial class NativeMethods {

    /// Return Type: HMODULE->HINSTANCE->HINSTANCE__*
    ///lpLibFileName: LPCWSTR->WCHAR*
    [System.Runtime.InteropServices.DllImportAttribute("kernel32.dll", EntryPoint="LoadLibraryW")]
public static extern  System.IntPtr LoadLibraryW([System.Runtime.InteropServices.InAttribute()] [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.LPWStr)] string lpLibFileName) ;

}

仅添加此代码比添加完整的 C++\CLI 项目要快得多。

关于.net - .NET PInvoke 能否从用户指定的目录动态加载 native dll?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/530143/

相关文章:

java - 在java中从文件夹ID和父ID创建文件夹

c# - 委托(delegate)实例和方法指针有什么区别?

c# - 如果多次使用,是否应该评估从 OrderBy 返回的 IEnumerable?

c# - Retinex算法实现

c# - Rider 无法找到已安装的 .NET Core,无法使用 MSBuild.dll 访问目录

java - 创建文件,java中的异常情况

c# - 访问帧名称会导致 "Access is denied"异常

git - 在git服务器上找不到推送的仓库

C# P/调用结构对齐

c# - 使用 Windows API 从富文本控件检索文本的正确方法是什么?