首页 > 解决方案 > 来自 kernel32 的 DllImport LoadLibrary 和 LoadLibraryEx 适用于 .NET Framework 4.0 但不适用于 4.5+

问题描述

我有一段加载本机 dll 的代码,它使用 LoadLibrary 从 kernel32 使用 DllImport 加载 dll

    public static IntPtr Load(string fileName)
    {
        IntPtr num = LoadLibrary(fileName);
        if (num == IntPtr.Zero)
        {
            throw new Win32Exception(Marshal.GetLastWin32Error());
        }
        return num;
    }

    [DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
    internal static extern IntPtr LoadLibrary(string dllFilePath);

这段代码在 .NET framework 4.0 上工作,但在 4.5+ 上它大部分时间都会抛出System.ComponentModel.Win32Exception: '%1 is not a valid Win32 application',有时它在错误消息中说操作成功并不一致。

此代码在 .NET 框架 4.0 上不会失败并返回指针。

起初我认为这是一个环境问题,但在不同的相同问题上进行了测试。没有使用 PInvoke 的经验,并且在堆栈溢出时找不到这个问题。有人可以指导我一些指示。

运行配置无关紧要,尝试了 x86 和 x64 相同的问题

LoadLibraryEx 也会发生同样的事情。

提前致谢。

标签: c#.netpinvokenativedllimport

解决方案


推荐阅读