我有兴趣了解有关在exes和dll之间混合运行时的更多信息。在WinXP机器上,我创建了一个针对发布运行时(/ MD)的dll构建和一个调用dll中构建debug(/ MDd)的函数的exe。 dll中的函数将内存分配给堆,exe将删除它。我预计这会崩溃,但是,它会挂起。使用ProcessExplorer我看到可执行文件的状态是“wait:userrequest”。 Vista机器上的相同练习会显示对话框。我想在我的XP机器上看到对话框!
我尝试过与所有建议相反的here。我已经搜索了很长一段时间了。我已经开始使用我在gpedit.msc中找到的所有错误报告服务,并验证错误报告服务是否在AdministrativeTools->服务对话框中运行。
要明确,这是我的dll:
int* getDllMem(){
printf("dll alloc mem");
int *ptr = new int;
return ptr;
}
这是我的exe:
int main()
{
printf("main\n");
int *ptr = getDllMem();
printf("main delete\n");
delete ptr;
printf("main exit\n");
return 0;
}
答案 0 :(得分:2)
您的程序已经进入未定义和错误的行为。为什么期望在不同的操作系统上获得完全相同的结果?
如果在每台机器的执行过程中发生了一些甚至略有不同的事情,它可能会导致一个挂起而另一个立即崩溃的结果。
程序使用的运行时可能在这些机器/操作系统之间略有不同。也许操作系统的其他方面正在产生影响(例如,address space layout randomization)。
我怀疑只有对运行时非常了解的人和堆管理员才能准确回答为什么会有差异。
老实说,我对这个问题的直觉反应是:你不应该花太多时间担心为什么这两个操作系统之间的程序失败是不同的,因为你不应该首先编写这样的程序。
答案 1 :(得分:0)
XP和Vista有不同的系统架构,可能还有不同的汇编代码。你在什么机器上编译程序? XP还是vista?