c++ mfc 调用出现Runtime Error 本帖最后由 VisualEleven 于 2013-05-11 18:19:33 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 CxhworkApp* myApp=(CxhworkApp*)::AfxGetApp();CString bdsstr=myApp->Gethtmlurl(L"http://www.baidu.com",L"");-------------------应该是返回的myApp指针无效了吧 单步调试一下。看是Gethtmlurl函数内有问题还是什么 你的UINT CxhworkApp::proc(LPVOID lprarm)函数又是被谁调用的? 感谢上面的大大们,线程我不懂。好象是下面这句调用的AfxBeginThread(proc,NULL);代码我再贴全点:BOOL CxhworkApp::InitInstance(){ // 如果一个运行在 Windows XP 上的应用程序清单指定要 // 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式, //则需要 InitCommonControlsEx()。否则,将无法创建窗口。 INITCOMMONCONTROLSEX InitCtrls; InitCtrls.dwSize = sizeof(InitCtrls); // 将它设置为包括所有要在应用程序中使用的 // 公共控件类。 InitCtrls.dwICC = ICC_WIN95_CLASSES; InitCommonControlsEx(&InitCtrls); CWinApp::InitInstance(); // 初始化 OLE 库 if (!AfxOleInit()) { AfxMessageBox(IDP_OLE_INIT_FAILED); return FALSE; } AfxEnableControlContainer(); // 标准初始化 // 如果未使用这些功能并希望减小 // 最终可执行文件的大小,则应移除下列 // 不需要的特定初始化例程 // 更改用于存储设置的注册表项 // TODO: 应适当修改该字符串, // 例如修改为公司或组织名 SetRegistryKey(_T("应用程序向导生成的本地应用程序")); LoadStdProfileSettings(4); // 加载标准 INI 文件选项(包括 MRU) // 注册应用程序的文档模板。文档模板 // 将用作文档、框架窗口和视图之间的连接 CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CxhworkDoc), RUNTIME_CLASS(CMainFrame), // 主 SDI 框架窗口 RUNTIME_CLASS(CxhworkView)); if (!pDocTemplate) return FALSE; AddDocTemplate(pDocTemplate); // 分析标准外壳命令、DDE、打开文件操作的命令行 CCommandLineInfo cmdInfo; ParseCommandLine(cmdInfo); // 调度在命令行中指定的命令。如果 // 用 /RegServer、/Register、/Unregserver 或 /Unregister 启动应用程序,则返回 FALSE。 if (!ProcessShellCommand(cmdInfo)) return FALSE; // 唯一的一个窗口已初始化,因此显示它并对其进行更新 //m_pMainWnd->ShowWindow(SW_SHOW); //m_pMainWnd->UpdateWindow(); // 仅当具有后缀时才调用 DragAcceptFiles // 在 SDI 应用程序中,这应在 ProcessShellCommand 之后发生 hRead=GetStdHandle(STD_INPUT_HANDLE); hWrite=GetStdHandle(STD_OUTPUT_HANDLE); m_Views[0] = ((CFrameWnd*)m_pMainWnd)->GetActiveView(); //m_ViewIndex=1; srand((unsigned)time(NULL)); //addView(); //addView(); //addView(); m_returnstr=sendXml(L"ds/connect.php",L"a=bn2"); AfxBeginThread(proc,NULL); return TRUE;} 感谢上面的大大们,线程我不懂。好象是下面这句调用的AfxBeginThread(proc,NULL);代码我再贴全点:BOOL CxhworkApp::InitInstance(){ // 如果一个运行在 Windows XP 上的应用程序清单指定要 // 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式, //则需要 InitCommonControlsEx()。否则,将无法创建窗口。 INITCOMMONCONTROLSEX InitCtrls; InitCtrls.dwSize = sizeof(InitCtrls); // 将它设置为包括所有要在应用程序中使用的 // 公共控件类。 InitCtrls.dwICC = ICC_WIN95_CLASSES; InitCommonControlsEx(&InitCtrls); CWinApp::InitInstance(); // 初始化 OLE 库 if (!AfxOleInit()) { AfxMessageBox(IDP_OLE_INIT_FAILED); return FALSE; } AfxEnableControlContainer(); // 标准初始化 // 如果未使用这些功能并希望减小 // 最终可执行文件的大小,则应移除下列 // 不需要的特定初始化例程 // 更改用于存储设置的注册表项 // TODO: 应适当修改该字符串, // 例如修改为公司或组织名 SetRegistryKey(_T("应用程序向导生成的本地应用程序")); LoadStdProfileSettings(4); // 加载标准 INI 文件选项(包括 MRU) // 注册应用程序的文档模板。文档模板 // 将用作文档、框架窗口和视图之间的连接 CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CxhworkDoc), RUNTIME_CLASS(CMainFrame), // 主 SDI 框架窗口 RUNTIME_CLASS(CxhworkView)); if (!pDocTemplate) return FALSE; AddDocTemplate(pDocTemplate); // 分析标准外壳命令、DDE、打开文件操作的命令行 CCommandLineInfo cmdInfo; ParseCommandLine(cmdInfo); // 调度在命令行中指定的命令。如果 // 用 /RegServer、/Register、/Unregserver 或 /Unregister 启动应用程序,则返回 FALSE。 if (!ProcessShellCommand(cmdInfo)) return FALSE; // 唯一的一个窗口已初始化,因此显示它并对其进行更新 //m_pMainWnd->ShowWindow(SW_SHOW); //m_pMainWnd->UpdateWindow(); // 仅当具有后缀时才调用 DragAcceptFiles // 在 SDI 应用程序中,这应在 ProcessShellCommand 之后发生 hRead=GetStdHandle(STD_INPUT_HANDLE); hWrite=GetStdHandle(STD_OUTPUT_HANDLE); m_Views[0] = ((CFrameWnd*)m_pMainWnd)->GetActiveView(); //m_ViewIndex=1; srand((unsigned)time(NULL)); //addView(); //addView(); //addView(); m_returnstr=sendXml(L"ds/connect.php",L"a=bn2"); AfxBeginThread(proc,NULL); return TRUE;} UINT CxhworkApp::proc(LPVOID lprarm){if (!AfxOleInit()){ AfxMessageBox("Ole Init Fail"); return 0;}CxhworkApp* myApp=(CxhworkApp*)::AfxGetApp();CString bdsstr=myApp->Gethtmlurl(L"http://www.baidu.com",L"");return TRUE;}AfxOleInit只对调用的线程有效. UINT CxhworkApp::proc(LPVOID lParam){ CxhworkApp* myApp=(CxhworkApp*)lParam; CString bdsstr=myApp->Gethtmlurl(L"http://www.baidu.com",L""); return TRUE;}AfxBeginThread(proc, this);Gethtmlurl 里最好有try catch 捕捉异常 软件的法律纠纷问题,请各位高人解答,在线等 wininet internetwritefile 同一request 为什么都是新连接? 关于一个画线,和坐标的转换问题 苦恼BSTR 怎么解决:(error C3861: “UpdataData”: 即使使用参数相关的查找,也未找到标识符) HTTP协议 求助 VC中输入多行文本内容用什么控件?静态文本只能输入一行,有没有好办法? 求救如何用vc开发 请大家看看,这是中了病毒吗? VC中通过点击按钮打开chm文件还不是F1 使用CGdipButton之后Button变形
CString bdsstr=myApp->Gethtmlurl(L"http://www.baidu.com",L"");
-------------------
应该是返回的myApp指针无效了吧
AfxBeginThread(proc,NULL);代码我再贴全点:BOOL CxhworkApp::InitInstance()
{
// 如果一个运行在 Windows XP 上的应用程序清单指定要
// 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,
//则需要 InitCommonControlsEx()。否则,将无法创建窗口。
INITCOMMONCONTROLSEX InitCtrls;
InitCtrls.dwSize = sizeof(InitCtrls);
// 将它设置为包括所有要在应用程序中使用的
// 公共控件类。
InitCtrls.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(&InitCtrls); CWinApp::InitInstance(); // 初始化 OLE 库
if (!AfxOleInit())
{
AfxMessageBox(IDP_OLE_INIT_FAILED);
return FALSE;
}
AfxEnableControlContainer();
// 标准初始化
// 如果未使用这些功能并希望减小
// 最终可执行文件的大小,则应移除下列
// 不需要的特定初始化例程
// 更改用于存储设置的注册表项
// TODO: 应适当修改该字符串,
// 例如修改为公司或组织名
SetRegistryKey(_T("应用程序向导生成的本地应用程序"));
LoadStdProfileSettings(4); // 加载标准 INI 文件选项(包括 MRU)
// 注册应用程序的文档模板。文档模板
// 将用作文档、框架窗口和视图之间的连接
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CxhworkDoc),
RUNTIME_CLASS(CMainFrame), // 主 SDI 框架窗口
RUNTIME_CLASS(CxhworkView));
if (!pDocTemplate)
return FALSE;
AddDocTemplate(pDocTemplate); // 分析标准外壳命令、DDE、打开文件操作的命令行
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
// 调度在命令行中指定的命令。如果
// 用 /RegServer、/Register、/Unregserver 或 /Unregister 启动应用程序,则返回 FALSE。
if (!ProcessShellCommand(cmdInfo))
return FALSE; // 唯一的一个窗口已初始化,因此显示它并对其进行更新
//m_pMainWnd->ShowWindow(SW_SHOW);
//m_pMainWnd->UpdateWindow();
// 仅当具有后缀时才调用 DragAcceptFiles
// 在 SDI 应用程序中,这应在 ProcessShellCommand 之后发生 hRead=GetStdHandle(STD_INPUT_HANDLE);
hWrite=GetStdHandle(STD_OUTPUT_HANDLE); m_Views[0] = ((CFrameWnd*)m_pMainWnd)->GetActiveView();
//m_ViewIndex=1;
srand((unsigned)time(NULL));
//addView();
//addView();
//addView();
m_returnstr=sendXml(L"ds/connect.php",L"a=bn2");
AfxBeginThread(proc,NULL); return TRUE;
}
AfxBeginThread(proc,NULL);代码我再贴全点:BOOL CxhworkApp::InitInstance()
{
// 如果一个运行在 Windows XP 上的应用程序清单指定要
// 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,
//则需要 InitCommonControlsEx()。否则,将无法创建窗口。
INITCOMMONCONTROLSEX InitCtrls;
InitCtrls.dwSize = sizeof(InitCtrls);
// 将它设置为包括所有要在应用程序中使用的
// 公共控件类。
InitCtrls.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(&InitCtrls); CWinApp::InitInstance(); // 初始化 OLE 库
if (!AfxOleInit())
{
AfxMessageBox(IDP_OLE_INIT_FAILED);
return FALSE;
}
AfxEnableControlContainer();
// 标准初始化
// 如果未使用这些功能并希望减小
// 最终可执行文件的大小,则应移除下列
// 不需要的特定初始化例程
// 更改用于存储设置的注册表项
// TODO: 应适当修改该字符串,
// 例如修改为公司或组织名
SetRegistryKey(_T("应用程序向导生成的本地应用程序"));
LoadStdProfileSettings(4); // 加载标准 INI 文件选项(包括 MRU)
// 注册应用程序的文档模板。文档模板
// 将用作文档、框架窗口和视图之间的连接
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CxhworkDoc),
RUNTIME_CLASS(CMainFrame), // 主 SDI 框架窗口
RUNTIME_CLASS(CxhworkView));
if (!pDocTemplate)
return FALSE;
AddDocTemplate(pDocTemplate); // 分析标准外壳命令、DDE、打开文件操作的命令行
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
// 调度在命令行中指定的命令。如果
// 用 /RegServer、/Register、/Unregserver 或 /Unregister 启动应用程序,则返回 FALSE。
if (!ProcessShellCommand(cmdInfo))
return FALSE; // 唯一的一个窗口已初始化,因此显示它并对其进行更新
//m_pMainWnd->ShowWindow(SW_SHOW);
//m_pMainWnd->UpdateWindow();
// 仅当具有后缀时才调用 DragAcceptFiles
// 在 SDI 应用程序中,这应在 ProcessShellCommand 之后发生 hRead=GetStdHandle(STD_INPUT_HANDLE);
hWrite=GetStdHandle(STD_OUTPUT_HANDLE); m_Views[0] = ((CFrameWnd*)m_pMainWnd)->GetActiveView();
//m_ViewIndex=1;
srand((unsigned)time(NULL));
//addView();
//addView();
//addView();
m_returnstr=sendXml(L"ds/connect.php",L"a=bn2");
AfxBeginThread(proc,NULL); return TRUE;
}
{
if (!AfxOleInit())
{
AfxMessageBox("Ole Init Fail");
return 0;
}
CxhworkApp* myApp=(CxhworkApp*)::AfxGetApp();
CString bdsstr=myApp->Gethtmlurl(L"http://www.baidu.com",L"");return TRUE;
}
AfxOleInit只对调用的线程有效.
UINT CxhworkApp::proc(LPVOID lParam)
{
CxhworkApp* myApp=(CxhworkApp*)lParam;
CString bdsstr=myApp->Gethtmlurl(L"http://www.baidu.com",L"");
return TRUE;
}
AfxBeginThread(proc, this);Gethtmlurl 里最好有try catch 捕捉异常