本帖最后由 MarkZar 于 2011-11-19 14:12:59 编辑

解决方案 »

  1.   

    PEInfo::PEInfo()
    {
        //Initilize related variable
        TCHAR* FilePathName = new TCHAR[MAX_PATH];
        ZeroMemory(FilePathName,MAX_PATH);
      

  2.   

    为什么是:
    int main()
    {
        PEInfo pe;
        pe.OpenAndMapFile();
        cout << "All is OK." << endl;
    }
    工程类型不对
      

  3.   

    int main()
    {
        PEInfo pe;
        pe.OpenAndMapFile();
        cout << "All is OK." << endl;}函数要返回值啊,那个错误要Debug一下
      

  4.   

    OpenAndMapFile是UI工程用的
    你要用w32的:
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) 
      

  5.   

    int main()函数也照样可以调用WinAPI,不论消息框,打开对话框都能调用,我以前试过的,你不信可以简单的试一下MessageBox,问题应该不在这
      

  6.   

    int main()函数也照样可以调用WinAPI,不论消息框,打开对话框都能调用,我以前试过的,你不信可以简单的试一下MessageBox,问题应该不在这对,在控制台程序中是可以调用win32api函数的,程序问题出在这里
    1. 在构造函数定义了和成员变量一样的名字 FilePathName ,使得误认为是成员变量FilePathName 被分配了内存
    PEInfo::PEInfo()
    {
        //Initilize related variable
         FilePathName = new TCHAR[MAX_PATH]; //把 TCHAR* 去掉2。要想对话框出现还需要在构造函数里对FilePathName进行如下操作
       memset(FilePathName,0,MAX_PATH);
      

  7.   

    ’MessageBox‘ 在‘user32.lib’里
    ’GetOpenFileName‘在‘comdlg32.lib.’里用main(控制台)可能是调不出来的
      

  8.   

    楼主可参考一下例子:#include <iostream>
    using namespace std;class test
    {
    public:
    test();
    ~test();
    int nCount;
    };test::test()
    {
    int nCount=1;
    cout <<nCount<<endl;          //输出test::test()函数的局部变量nCount
    cout <<this->nCount<<endl;    //输出a对象的成员变量nCount
    }test::~test()
    {
    cout <<"析构函数.\n";
    }int main()
    {
    test a;
    return 0;
    }
      

  9.   

    试了试:
    // PEInfo.cpp: implementation of the CPEInfo class.
    //
    //////////////////////////////////////////////////////////////////////#include "PEInfo.h"//////////////////////////////////////////////////////////////////////
    // Construction/Destruction
    //////////////////////////////////////////////////////////////////////CPEInfo::CPEInfo()
    {
        TCHAR* FilePathName = new TCHAR[MAX_PATH];
    }CPEInfo::~CPEInfo()
    {}
    //
    void CPEInfo::OpenAndMapFile()
    {
    //OpenDialog
        OPENFILENAME ofn ;
    memset(&ofn, 0, sizeof(ofn));
    ofn.lStructSize = sizeof(ofn);
    ofn.lpstrFilter = _T("All Files\0*.*\0EXE Files\0*.exe\0Dll Files\0*.dll\0\0");
    ofn.lpstrFile = FilePathName;
    ofn.nMaxFile = MAX_PATH;
    ofn.Flags = OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST;
    GetOpenFileName(&ofn);
    }
    //
    int main()
    {
        CPEInfo pe;
    MessageBox(0,"haha","haha",MB_OK);//works !
        pe.OpenAndMapFile();// "Unhandled Exception" return 0;
    }