c# - 来自 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++ - (线性或多项式)近似正弦数据下限的回归算法
- spring - 在 Spring 应用程序中以编程方式获取 Oauth2.0 访问令牌(不使用 application.yaml)
- java - Log4j RollingFileAppender 备份未完成
- javascript - 如何计算 Node.js 包的加载时间损失?
- php - Bootstrap 4 Image 产品没有正确排列
- proguard - 无法忽略 proguard 警告
- vue.js - Vue:如何以正确的方式迭代更新道具中的属性
- java - 如何在警报管理器中满足预定时间列表以推送通知
- testing - 协议消费者测试是否仅用于生成合同 json 文件?
- java - 使用耳内反射改变静态场