我在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’

解决方案 »

  1.   

    如果你要学习mfc呢 就直接新建mfc工程,建win32 app又要用mfc,给自己找麻烦啊
      

  2.   

    int AFXAPI AfxWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPTSTR lpCmdLine, int nCmdShow)
    {

    CWinThread* pThread = AfxGetThread();
    CWinApp* pApp = AfxGetApp();
    都为NULL,自然
    if (!pThread->InitInstance())
    就非法了
      

  3.   

    up!!!!CFrameWnd *Frame=new CFrameWnd();
    Frame->Create(NULL,"Hello MFC");
    Frame->ShowWindow(SW_SHOW);
    m_pMainWnd=Frame;
    上面楼主写出来这几句是没问题的!问题不在这里
      

  4.   

    用MFC的Wizard新建空白工程吧
    Win32 Application是SDK编程,不是这样搞的,当然也可以支持MFC
    Win32 Application一般先是InitInstance,这里面Register一个WINDOWS的窗口~声明一个WinProc函数。
    在WinMain里分发消息
      

  5.   

    用Win32建一个窗口是这样的
    ///////////////////////////////////////////////////////////////
    // 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);
    }
      

  6.   

    设断点调试,看你的Frame指针值是否为NULL
      

  7.   

    #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;
    }
    };
    MyApp myapp;
      

  8.   

    设置MFC:project settings->general->Microsoft Foundation Classes->Use MFC in a Shared DLL
    设置多线程:project settings->c/c++->Category(Code Generation)->Use run-time library(Multithreaded)