首次访问DLL时C#应用程序与C DLL崩溃

时间:2011-04-07 20:34:11

标签: c# dll

我有一个C#应用程序和一个C DLL,我写的这两个都是在我尝试过的几台W7(64位)和XP(32)机器上运行的。今天我在另一台机器(XP)上安装了app / dll,它在第一次调用DLL时崩溃了。我已经替换了用return(0)调用的DLL中的代码,它仍然崩溃。 我一直在几台机器上使用这个app / dll设置,没有任何故障,但现在我很难过,因为它只是访问DLL而死。有任何想法吗?

自我原帖后添加了备注: 我根据以下建议学到了一些东西...... 1.异常错误消息是“......并排配置不正确......”。    谷歌搜索似乎表明,这是一个与PC没有相关的问题    正确(兼容)的环境;但请注意,这个C#应用程序已在此运行    PC在过去就好了(不同之处在于DLL现在是用VS2008构建的    而不是Cygwin / MinGW / GCC)。 2.依赖者walker告诉我无法找到文件IESHIMS.DLL。我没有    知道这个文件的用途,但显然我需要它。

2 个答案:

答案 0 :(得分:1)

也许C dll(可能是C ++运行时?)缺少依赖项(dll)?您可以在应用程序崩溃的计算机上的dll上运行depends.exe:http://www.dependencywalker.com/,并查看是否存在任何缺少的依赖项。

您是否还可以在第一次调用C dll时添加异常处理以捕获并显示任何异常?

答案 1 :(得分:1)

IESHIMS.DLL依赖关系几乎出现在依赖walker中打开的每个文件中,并且它从来不是任何问题的根源 - 你几乎肯定会忽略它。

您应该检查以确保您具有正确版本的Visual C ++ Redistributable,并且您可能还想检查此问题 - Side-by-side configuration error (Microsoft.VC80.CRT v8.0.50608.0)以确保这不适用于您。

最后,您应确保您的C#应用​​程序针对特定体系结构(本机dll构建的体系结构)而不是“任何CPU”,因为任何“任何CPU”将意味着程序将以64位或32位应用程序,具体取决于您运行它的计算机,这将导致64位计算机上出现问题,以便加载32位本机dll。

如果您的应用程序以前在使用不同的运行时编译时工作,那么听起来好像Visual C ++运行时根本没有安装在该特定计算机上 - 您永远不应该认为它是,但是在许多计算机上它已经由另一台计算机安装应用

更新:以下是指向Microsoft Visual C++ 2008 Redistributable Package (x86)的链接。