刚开始学mfc就遇到了这样的问题,比照着书上例子自己编一个程序,仅仅改了几个字符串而已,我的程序就不能运行,出现“没能找到MSVCR90D.DLL,因此这个程序未能启动,重新安装可能解决问题”对话框,而原来的例子却能够运行!真够无语!
上网查说是有一个微软的bug,代码放在fat32的磁盘中会出现这个问题,一想,对,C盘是fat32的,又学网上的方法将c盘转换成NTFS格式,结果还是出现了“没能找到MSVCR90D.DLL,因此这个程序未能启动,重新安装可能解决问题”对话框。大家帮我想想办法!下面是我的代码。
#include <windows.h>
#include <stdio.h>LRESULT CALLBACK WinSunProc(
  HWND hwnd, 
  UINT uMsg, 
  WPARAM wParam, 
  LPARAM lParam 
);int WINAPI WinMain(
  HINSTANCE hInstance, 
  HINSTANCE hPrevInstance, 
  LPSTR lpCmdLine, 
  int nCmdShow 
)
{
WNDCLASS wndcls;
wndcls.cbClsExtra=0;
wndcls.cbWndExtra=0;
wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);
wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);
wndcls.hInstance=hInstance;
wndcls.lpfnWndProc=WinSunProc;
wndcls.lpszClassName="wangxr2009";
wndcls.lpszMenuName=NULL;
wndcls.style=CS_HREDRAW | CS_VREDRAW;
RegisterClass(&wndcls); HWND hwnd;
hwnd=CreateWindow("wangxr2009","我的窗口",WS_OVERLAPPEDWINDOW,
0,0,600,400,NULL,NULL,hInstance,NULL); ShowWindow(hwnd,SW_SHOWNORMAL);
UpdateWindow(hwnd);

MSG msg; while (GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
} return 0;}LRESULT CALLBACK WinSunProc(
  HWND hwnd, 
  UINT uMsg, 
  WPARAM wParam, 
  LPARAM lParam 
)
{
switch(uMsg)
{
case WM_CHAR:
char szchar[20];
sprintf(szchar,"char is %d",wParam);
MessageBox(hwnd,szchar,"wangxr",0);
break;
case WM_LBUTTONDOWN:
MessageBox(hwnd,"moouse cliked","wangxr",0);
HDC hdc;
hdc=GetDC(hwnd);
TextOut(hdc,0,50,"MFC 基础学习",strlen("MFC 基础学习"));
ReleaseDC(hwnd,hdc);
break;
case WM_PAINT:
HDC hDC;
PAINTSTRUCT ps;
hDC=BeginPaint(hwnd,&ps);
TextOut(hDC,0,0,"培训",strlen("培训"));
EndPaint(hwnd,&ps);
break;
case WM_CLOSE:
if(IDYES==MessageBox(hwnd,"是否结束?","wangxr",MB_YESNO))
{
DestroyWindow(hwnd);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc( hwnd, uMsg,wParam,lParam );
} return 0;}

解决方案 »

  1.   

    网上下一个DLL
    或者编译程序的之前把项目属性中的“MFC使用”设置成“静态库中使用MFC”
      

  2.   

    在你的计算机中搜索这个文件,实在不行 #include到你的工程目录中。
      

  3.   

    原代码是这样的,我是比着它又写了一份代码,不好用。源代码在E盘,VS2008在C盘,我编的程序放在默认文件夹中。
    include <windows.h>
    #include <stdio.h>LRESULT CALLBACK WinSunProc(
      HWND hwnd,      // handle to window
      UINT uMsg,      // message identifier
      WPARAM wParam,  // first message parameter
      LPARAM lParam   // second message parameter
    );int WINAPI WinMain(
      HINSTANCE hInstance,      // handle to current instance
      HINSTANCE hPrevInstance,  // handle to previous instance
      LPSTR lpCmdLine,          // command line
      int nCmdShow              // show state
    )
    {
    WNDCLASS wndcls;
    wndcls.cbClsExtra=0;
    wndcls.cbWndExtra=0;
    wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
    wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);
    wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);
    wndcls.hInstance=hInstance;
    wndcls.lpfnWndProc=WinSunProc;
    wndcls.lpszClassName="Weixin2003";
    wndcls.lpszMenuName=NULL;
    wndcls.style=CS_HREDRAW | CS_VREDRAW;
    RegisterClass(&wndcls); HWND hwnd;
    hwnd=CreateWindow("Weixin2003","北京维新科学技术培训中心",WS_OVERLAPPEDWINDOW,
    0,0,600,400,NULL,NULL,hInstance,NULL); ShowWindow(hwnd,SW_SHOWNORMAL);
    UpdateWindow(hwnd); MSG msg;
    while(GetMessage(&msg,NULL,0,0))
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
    return 0;
    }LRESULT CALLBACK WinSunProc(
      HWND hwnd,      // handle to window
      UINT uMsg,      // message identifier
      WPARAM wParam,  // first message parameter
      LPARAM lParam   // second message parameter
    )
    {
    switch(uMsg)
    {
    case WM_CHAR:
    char szChar[20];
    sprintf(szChar,"char is %d",wParam);
    MessageBox(hwnd,szChar,"weixin",0);
    break;
    case WM_LBUTTONDOWN:
    MessageBox(hwnd,"mouse clicked","weixin",0);
    HDC hdc;
    hdc=GetDC(hwnd);
    TextOut(hdc,0,50,"计算机编程语言培训",strlen("计算机编程语言培训"));
    ReleaseDC(hwnd,hdc);
    break;
    case WM_PAINT:
    HDC hDC;
    PAINTSTRUCT ps;
    hDC=BeginPaint(hwnd,&ps);
    TextOut(hDC,0,0,"维新培训",strlen("维新培训"));
    EndPaint(hwnd,&ps);
    break;
    case WM_CLOSE:
    if(IDYES==MessageBox(hwnd,"是否真的结束?","weixin",MB_YESNO))
    {
    DestroyWindow(hwnd);
    }
    break;
    case WM_DESTROY:
    PostQuitMessage(0);
    break;
    default:
    return DefWindowProc(hwnd,uMsg,wParam,lParam);
    }
    return 0;
    }
      

  4.   

    还真的没有这个文件,二楼的哥们说在静态库中使用mfc,结果一下子出现了很多错误。
    1>winmain.obj : error LNK2019: 无法解析的外部符号 __imp__DispatchMessageA@4,该符号在函数 _WinMain@16 中被引用
    1>winmain.obj : error LNK2019: 无法解析的外部符号 __imp__TranslateMessage@4,该符号在函数 _WinMain@16 中被引用
    1>winmain.obj : error LNK2019: 无法解析的外部符号 __imp__GetMessageA@16,该符号在函数 _WinMain@16 中被引用
    1>winmain.obj : error LNK2019: 无法解析的外部符号 __imp__UpdateWindow@4,该符号在函数 _WinMain@16 中被引用
    等等。
      

  5.   

    看看你的VS2008下VC++的编译环境设置是否正确,不会设置的话,到网上搜下如何设置VC++编译环境的相关文章。
      

  6.   

    1>mt.exe : general error c101008a: Failed to save the updated manifest to the file ".\Debug\test1.exe.embed.manifest
    这个一般是什么问题?
      

  7.   

    Rebuild All
    “重新生成解决方案”
      

  8.   

    http://hi.baidu.com/frankxirr/blog/item/b50d63ed54f78b2f63d09fa6.html
      

  9.   

    试下这方法看可以不
    http://www.cnblogs.com/_xbc/archive/2010/05/03/1726753.html
      

  10.   

    我也出现了相同的情况,使用十楼
    Rebuild All
    “重新生成解决方案”
    成功解决问题
      

  11.   

    你可以试试用 Dependency 工具查看,你编译的 和 原来的 exe文件各自都依赖哪些dll
      

  12.   

    这个问题是微软VS的一个bug,原因是因为你的功能创建在FAT32分区下,要彻底解决这个问题需要将项目创建在NTFS分区下 
    如果你的vc2008装在了NTFS分区,而且项目同样放在NTFS分区。那么安装补丁:http://download.microsoft.com/download/0/d/5/0d5580c0-9d8c-4873-9024-553323ab8589/WindowsXP-KB889016-x86-CHS.exe
      

  13.   

    英文版:Project Properties -> Manifest Tool-> Use FAT32 Work-around -->Yes
    中文版:项目-->项目属性-->配置属性-->清单工具-->使用FAT32解决方法-->是
    然后clean下,然后Rebuild即可正常运行
      

  14.   

      十楼的方案好用!!!
      Rebuild All
    “重新生成解决方案”
      

  15.   

    去网上www.zhaoDLL.com上下载一个msvcr90d dll
    然后放在c:windos/system32目录下就好了
      

  16.   

    你那个是SDK的代码,新建错工程了,选择 wun32 ,win32窗口。
      

  17.   

    拷贝dll
    或者是manifest的问题。