C++程序运行后 出现对话框错误 提示 Unhandle exception in XX . exe (神马神马.DLL):M VC exception

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++程序运行后 出现对话框错误 提示 Unhandle exception in XX . exe (神马神马.DLL):M VC exception相关的知识,希望对你有一定的参考价值。

代码如下:
#include <fstream>
#include <iostream>
#include <string>

using namespace std;

ifstream inData;
ofstream outData;

string Answerstd;
string Answer;

void Checktheanswer(ifstream&,ofstream&,string&,string&);

int main ()

inData.open("exams.dat");
outData.open("scores.dat");
string Num;
inData>>Answerstd;
inData>>Num;
inData>>Answer;

Checktheanswer(inData,outData,Num,Answer);
outData.close();

return 0;

//*****************************************************************************************************
void Checktheanswer(ifstream& inData,ofstream& outData,string& Num,string& Answer)

while(inData)

if (Answer.length()==Answerstd.length())

int T; //计读取的次数
int I; //计答案的个数
int Mark; //成绩
T=0;
I=0;
Mark=0;
while (T<=4)

Mark=0;
I=0;
while (I<=20)

if (Answer.substr(I,1)!="a"&&Answer.substr(I,1)!="b"&&Answer.substr(I,1)!="c"&&Answer.substr(I,1)!="d"&&Answer.substr(I,1)!="e"&&Answer.substr(I,1)!="f")

cout<<"The answer is illigal,it must be a-f and All of them must be 20"<<endl;


else if (Answer.substr(I,1)==Answerstd.substr(I,1))
Mark=Mark+1;

I++;

outData<<Num<<" "<<Mark;
inData>>Num;
inData>>Answer;

T++;



else
cout<<"The length of the answer is not correct !"<<endl;

inData>>Num;
inData>>Answer;




一个读取文件中学生答案与标准答案比对的程序,不放数据文件时一切正常,一放就出那个错误,另 学号 也就是NUM变量要读取的是一个7位的号码
求高人指点 非常急!在线等结果 谢谢

我使用一个存有12.0
16.0
11.4
的xls文件调式该程序是对的啊。当然我吧string 定义的Answerstd;Num;,Answer 改为指针了。
参考技术A 看标题好像中毒了,杀毒试试!

在 C++ 中从其他正在运行的线程模态消息对话框

【中文标题】在 C++ 中从其他正在运行的线程模态消息对话框【英文标题】:Modal a message dialog from other running thread in c++ 【发布时间】:2014-09-20 11:53:00 【问题描述】:

我调用了一个存在于 DLL 中的函数,在我的 C++ 程序开始时。 在该调用返回之后,无论如何在程序中我通过调用 DoModal() 创建了从 CDialog 继承的主对话框。 例如,在 DLL 中的函数中,我运行了另一个线程,它的工作是每 20 秒检查一次是否存在错误。如果存在错误,它将通过 ::MessageBoxW(...) 在消息对话框中显示错误。

我的问题:

当我显示消息对话框时,用户可以与主线程创建的窗口(主对话框或其子窗口)进行交互。我不要它。消息对话框在所有线程上必须是模态的,以便用户在关闭消息对话框之前无法与程序交互。

解决方案选项:

在第二个线程中调用 MessageBox 之前,我想我有这个选项可供选择:

    获取在我的程序中运行的除此线程之外的所有线程,并对其调用 sleep。但是如何? 在所有线程中获取在我的程序中打开的所有窗口,并对其调用 EnableWindow(false)。但是如何?我找到了EnumWindows(...),但是如何在程序中枚举我自己的窗口? 有什么建议吗?

限制:

您建议的解决方案必须满足这些限制:

    我不想修改主程序 (.exe) 的源代码。我只能更改 DLL 源。 将主对话框的句柄传递给 DLL 函数,不允许。由于上述限制,创建主对话框是在调用 DLL 函数之后。

【问题讨论】:

UI 应该只在一个线程中完成。你的后台线程应该向主 UI 线程发送一条消息,告诉它显示相应的信息。换句话说,您必须同时更改 DLL 和使用它的程序。 因为不能修改exe,所以应该在dll中探索GUI线程。也就是说,我自己并没有真正使用过 GUI 线程,但在这种情况下需要考虑一些事情。 【参考方案1】:

它已经写在评论中:仅从一个线程执行此类 UI。所以我在这里写的答案只是第二选择!

如果主线程正在运行,您可以获得该线​​程当前活动窗口的句柄。 将其作为父级传递给您的对话框并调用 DoModal。

但这会在线程之间创建一堆消息。如果主线程正在等待并且不处理任何消息,您的程序可能会挂起。

提示:不要从主线程传递指向 CWnd 的指针。获取窗口句柄并使用 CWnd::FromHandle 获取指向窗口对象的指针。将此传递给 CDialog 对象的构造函数。

【讨论】:

感谢您的回复,您说Get the handle of the current active window of main thread。但是我怎么能在另一个线程中做到这一点?

以上是关于C++程序运行后 出现对话框错误 提示 Unhandle exception in XX . exe (神马神马.DLL):M VC exception的主要内容,如果未能解决你的问题,请参考以下文章

c++ builder错误提示cannot creat file D:\路径\InitCC32.exe

用VC编程时运行提示出错Microsoft Visual C++ Runtime Library Assertion failed!。 求高手解决啊!

fiddler运行后打开网站,程序里怎么不显示

安装mysql出现此应用无法在你的电脑上运行

开机后出现explorer.exe应用程序错误,怎么解决?

无法使用 gcc 在 Linux 中编译任何 c++ 程序,出现一些奇怪的错误 [重复]