来自kernel32的DllImport LoadLibrary和LoadLibraryEx可在.NET Framework 4.0上运行,但不能在4.5+上运行

时间:2018-12-04 18:42:51

标签: c# .net pinvoke native dllimport

我有一段代码可以加载本机dll,它使用DllImport从kernel32中的LoadLibrary加载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 Framework 4.0上不会失败并返回指针。

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

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

LoadLibraryEx也发生同样的事情。

谢谢。

0 个答案:

没有答案