【发布时间】:2011-04-29 22:39:21
【问题描述】:
我不是要求 SO 告诉我问题出在哪里,我只是想问在这种情况下我应该进行哪些健全性检查。
使用 Visual Studio 2005,纯 c++ 项目。实际代码是:
int Sum(int a, int b)
{
return a+b;
}
没有预编译的头文件。使用 DEF 文件导出:
LIBRARY testdll
EXPORTS
Sum
在测试机器上编译(再次是 VS2005),DLL 可以在其他机器上工作(64 位和 32 位测试,总是使用 Win32 目标平台编译)。在我的机器上编译(64 位,相同的项目,相同的属性),DLL 仅在我的机器上运行,在其他机器上它会启动即时调试器(如果不是 JIT,则会严重崩溃已安装):
Caller.exe 中 0x00000000 处未处理的异常:0xC0000005:访问冲突读取位置 0x00000000。
起初我在我的测试机器上用j 调用它,这也会失败,给我(用cder)一个“找不到文件”错误。
其他症状:文件大小不同,我的机器给DLL多出了512字节。
我的系统配置:
- Windows Vista - 64 位
- VS2005 版本 8.050727.867 (vsvista.050727-8600)
- .NET Framework 版本 2.0.50727 SP2
测试环境:
- Windows XP - 32 位(虚拟机)
- VS2005 版本 8.0.50727.42 (RTM.050727-4200)
.NET Framework 版本 2.0.50727 SP2
Windows XP - 64 位
- VS2005 版本 8.0.50727.42 (RTM.050727-4200)
- .NET Framework 版本 2.0.50727 SP2
【问题讨论】:
-
这可能与您的 VS 版本具有不同版本的 VC 运行时 DLL 有关吗?
-
我首先要仔细检查 VS 为编译和链接创建的命令行是否相同。然后在每个平台上手动运行它们,看看显示的内容是否有任何差异。
-
@wallyk:我将项目从原始计算机复制到另一台计算机。尽管如此,我检查了两个命令行,它们是相同的。
-
@BoazYaniz:这是我最新的理论,但它只有在 Vista64 和 XP64 之间的 VC 运行时 DLL 不同时才有效。或者也许还有另一个我目前没有想到的增量。
标签: j c++ visual-studio dll visual-studio-2005