我在VC6建了一个空Win32 Application,静态调用MFC类库
然后HelloMFC.cpp如下:#include<afxwin.h>
class MyApp:public CWinApp
{
public:
BOOL InitInstance()
{
CFrameWnd *Frame=new CFrameWnd();
Frame->Create(NULL,"Hello MFC");
Frame->ShowWindow(SW_SHOW);
m_pMainWnd=Frame;
return true;
}
};
程序编译通过、链接通过,但程序不能执行
报错:内存不能为‘read’
然后HelloMFC.cpp如下:#include<afxwin.h>
class MyApp:public CWinApp
{
public:
BOOL InitInstance()
{
CFrameWnd *Frame=new CFrameWnd();
Frame->Create(NULL,"Hello MFC");
Frame->ShowWindow(SW_SHOW);
m_pMainWnd=Frame;
return true;
}
};
程序编译通过、链接通过,但程序不能执行
报错:内存不能为‘read’
解决方案 »
- vc ado怎么写numeric和bit?
- 问看MFC视频教程看过一遍后当要实现视频上那些功能的时候还是不会怎么办?
- 在对一个组合框操作中的问题??
- 跪求!!!!!
- 关于CListCtrl的Item的问题~~~
- 如何确定一个process是否中止?
- 这个马踏棋盘的代码有啥问题,能编译通过,但实现不了功能。
- 关于 advanced installer 如何制作安装文件
- 如何在没有安装打印机的情况下可以进行打印预览,用mfc实现这一功能
- 超级简单问题:怎么连接字符串?
- Microsoft Multimedia Control, version 6.0.lnk
- 出现no appropriate default constructor available错误,不知是什么原因,各位大哥来看看啊!
LPTSTR lpCmdLine, int nCmdShow)
{
中
CWinThread* pThread = AfxGetThread();
CWinApp* pApp = AfxGetApp();
都为NULL,自然
if (!pThread->InitInstance())
就非法了
Frame->Create(NULL,"Hello MFC");
Frame->ShowWindow(SW_SHOW);
m_pMainWnd=Frame;
上面楼主写出来这几句是没问题的!问题不在这里
Win32 Application是SDK编程,不是这样搞的,当然也可以支持MFC
Win32 Application一般先是InitInstance,这里面Register一个WINDOWS的窗口~声明一个WinProc函数。
在WinMain里分发消息
///////////////////////////////////////////////////////////////
// 04FirstWindow.cpp文件#include "stdafx.h"// 窗口函数的函数原形
LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
char szClassName[] = "MainWClass";
WNDCLASSEX wndclass;
// 用描述主窗口的参数填充WNDCLASSEX结构
wndclass.cbSize = sizeof(wndclass); // 结构的大小
wndclass.style = CS_HREDRAW|CS_VREDRAW; // 指定如果大小改变就重画
wndclass.lpfnWndProc = MainWndProc; // 窗口函数指针
wndclass.cbClsExtra = 0; // 没有额外的类内存
wndclass.cbWndExtra = 0; // 没有额外的窗口内存
wndclass.hInstance = hInstance; // 实例句柄
wndclass.hIcon = ::LoadIcon(NULL,
IDI_APPLICATION); // 使用预定义图标
wndclass.hCursor = ::LoadCursor(NULL,
IDC_ARROW); // 使用预定义的光标
wndclass.hbrBackground = (HBRUSH)
::GetStockObject(WHITE_BRUSH); // 使用白色背景画刷
wndclass.lpszMenuName = NULL; // 不指定菜单
wndclass.lpszClassName = szClassName ; // 窗口类的名称
wndclass.hIconSm = NULL; // 没有类的小图标
// 注册这个窗口类
::RegisterClassEx(&wndclass);
// 创建主窗口
HWND hwnd = ::CreateWindowEx(
0, // dwExStyle,扩展样式
szClassName, // lpClassName,类名
"My first Window!", // lpWindowName,标题
WS_OVERLAPPEDWINDOW, // dwStyle,窗口风格
CW_USEDEFAULT, // X,初始 X 坐标
CW_USEDEFAULT, // Y,初始 Y 坐标
CW_USEDEFAULT, // nWidth,宽度
CW_USEDEFAULT, // nHeight,高度
NULL, // hWndParent,父窗口句柄
NULL, // hMenu,菜单句柄
hInstance, // hlnstance,程序实例句柄
NULL) ; // lpParam,用户数据 if(hwnd == NULL)
{
::MessageBox(NULL, "创建窗口出错!", "error", MB_OK);
return -1;
} // 显示窗口,刷新窗口客户区
::ShowWindow(hwnd, nCmdShow);
::UpdateWindow(hwnd);
// 从消息堆中取出消息
MSG msg;
while(::GetMessage(&msg, NULL, 0, 0))
{
// 转化键盘消息
::TranslateMessage(&msg);
// 将消息发送到相应的窗口函数
::DispatchMessage(&msg);
} // 当GetMessage返回0时程序结束
return msg.wParam;
}
LRESULT CALLBACK MainWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
char szText[] = "最简单的窗口程序!";
switch (message)
{
case WM_PAINT: // 窗口客户区需要重画
{
HDC hdc;
PAINTSTRUCT ps; // 使无效的客户区变的有效,并取得设备环境句柄
hdc = ::BeginPaint (hwnd, &ps) ;
// 显示文字
::TextOut(hdc, 10, 10, szText, strlen(szText));
::EndPaint(hwnd, &ps);
return 0;
}
case WM_DESTROY: // 正在销毁窗口 // 向消息队列投递一个WM_QUIT消息,促使GetMessage函数返回0,结束消息循环
::PostQuitMessage(0) ;
return 0 ;
} // 将我们不处理的消息交给系统做默认处理
return ::DefWindowProc(hwnd, message, wParam, lParam);
}
class MyApp:public CWinApp
{
public:
BOOL InitInstance()
{
CFrameWnd *Frame=new CFrameWnd();
Frame->Create(NULL,"Hello MFC");
Frame->ShowWindow(SW_SHOW);
m_pMainWnd=Frame;
return true;
}
};
MyApp myapp;
设置多线程:project settings->c/c++->Category(Code Generation)->Use run-time library(Multithreaded)