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位的号码
求高人指点 非常急!在线等结果 谢谢
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!。 求高手解决啊!