加载本机 dll 时抛出 ExecutionEngineException

Posted

技术标签:

【中文标题】加载本机 dll 时抛出 ExecutionEngineException【英文标题】:ExecutionEngineException thrown when loading native dll 【发布时间】:2010-04-16 09:00:29 【问题描述】:

我有一个使用原生 32 位 DLL 的 32 位 .net 应用程序 通过 DllImport()。原生 DLL 是我们内部的文件分析库,我需要使用它,因为如果人们更新它(其他软件使用它),将它移植到 C# 会出现问题。

问题是,当我尝试在本机 DLL 中执行任何方法时,我会抛出 System.ExecutionEngineException。事实上,我已将托管应用程序简化为只调用本机方法的简单测试器,但它仍然失败。

我使用的是 64 位 Windows 7,但这并不重要,因为我将所有内容都编译为 32 位二进制文​​件。

有趣的是,当我在 Dependency Walker 中查看本机 DLL 时,它显示它找不到 msvcr90.dll - 但是当我在 Dependency Walker 中打开任何其他本机 DLL 时,它可以找到他们引用的 msvcr90.dll 就好了。会不会在编译原生 DLL 时出现一些错误而弄乱了它的 DLL 引用?

【问题讨论】:

【参考方案1】:

好的 - 问题有点模糊。显然,一位同事修改了本机 DLL 的方法以包含一个具有默认值的参数(C++ 处理得很好),但是,正如我们所知,C# 3.5 没有。为该参数提供值后,一切正常!

【讨论】:

以上是关于加载本机 dll 时抛出 ExecutionEngineException的主要内容,如果未能解决你的问题,请参考以下文章

无法加载 DLL 'SQLite.Interop.dll

无法加载DLL'SQLite.Interop.dll

使用 dlopen 加载动态库时抛出未定义的符号

SqlDataReader 在尝试将数据加载到 DataGrid WPF 时抛出异常

本机库 sqljdbc_auth.dll 已在另一个类加载器中加载

外部jar中的类在加载Resource时抛出异常