vs2008 MFC 常见错误--新员工常犯的错误《二》!

53)__stdcall 和__cdecl 是不同的,在回调函数的时候,一定要根据调用约定来定义,不然会出现堆栈错误;

 

Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call.  This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.

54)vs2008 对对话框添加类后,在添加消息函数时,找不到添加的类;

关掉程序,删掉.ncb后,在打开程序即可!

 

55)

转化MFC CString to std::string
unicode下:
CString str = L"Test";
std::wstring ws(str);
std::string s;
 
s.assign(ws.begin(), ws.end());

 

56)成员函数中调用OnClose, 不能关闭对话框;

解决办法:在OnClose中调用CDialog::OnCancel();

 

 

57)如何在Combo Box控件中显示指定的字符串? 

 ((CComboBox*)GetDlgItem(IDC_XXX_COMBO))->SetWindowText(strType);

注意将IDC_XXX_COMBO的type设置成Dropdown

 

58)win8 下IP 控件只能输入2位数,不能输入3位数字;

解决办法:将IP控件的宽度增大;

 

59)32位的程序FindFile,在64位的win7 下,不能判断system32下的文件是否存在?

 

 

60)win7 64位下安装directx 9c 出现TxView.dll 和Error S1023错误

解决办法:

1. Run this two commands.

 

MsiExec.exe /passive /X{F0C3E5D1-1ADE-321E-8167-68EF0DE699A5}
MsiExec.exe /passive /X{1D8E6291-B0D5-35EC-8441-6616F567A0F7}

卸载掉vs2010的运行库;

 

2)安装Install DirectX SDK( DXSDK_Jun10.exe)

 

3)安装directx 运行库

directx_Jun2010_redist.exe

 

61)vs2008 破解

1. 安装 VS2008 (如果你已经安装了,那忽略此项)

2. 打开 控制面板 –> 添加删除程序 , 找到 VS2008 的安装项,运行 VS2008的安装卸载程序;

3)然后打开破解程序CrackVS2008ForWindows7.exe,点击上面的 “Bug 微软”;

4. 输入相应的序列号,就可以啦;以下是收集的序列号:

1.Visual Studio 2008 Professional Edition:    XMQ2Y-4T3V6-XJ48Y-D3K2V-6C4WT

2.Visual Studio 2008 Team Test Load Agent:    WPX3J-BXC3W-BPYWP-PJ8CM-F7M8T

3.Visual Studio 2008 Team System: PYHYP-WXB3B-B2CCM-V9DX9-VDY8T

4.Visual Studio 2008 Team Foundation Server: WPDW8-M962C-VJX9M-HQB4Q-JVTDM

 

62)
虚拟光驱win7 下 vs2008 无法安装,安装对话框 弹出来马上消失

解决办法:使用虚拟光驱解压 提取vs2008 ,然后安装 又出现

vs2008安装错误 无法打开数据文件deffactory.dat

解决办法:

 

打开了指定目录下的DefFactory.dat文件发现里面是乱码,

在记事本中粘贴一下内容,将记事本名称改为“DefFactory.dat”,覆盖安装临时目录下的DefFactory.dat文件即可搞定。

[Version]
Signature=”$Windows NT$”
Provider=”Microsoft Visual C++ 2008 Express Edition - ENU”
Version=900.100.00
NullString=Null String
BootstrapperURL=fwlink/?LinkId=95926
NewVersionURL=fwlink/?linkid=96095
Lang=1033
AdminModeSupported=0

[Scenario List]
vsscenario.dll

[Scenario Factory Information]
Default Scenario=11E4C8F3-425E-43b9-B689-8BFDF03342E2


 

 63)vs2008 fatal error C1083: 无法打开包括文件:“afxwinappex.h”: No such file or directory

 安装vs2008 sp1 补丁。

 

 

64)linux 虚拟机 键盘不灵

你的是笔记本吗?如果是就按下Fn+F8,不是的话就按下numlock,要在虚拟机里面按下;

 

65)error C2660: “CWnd::PostMessageW”: 函数不接受 4 个参数

 ::PostMessage(pThis->m_hwnd,WM_PARAM_ACK_PARSER,(WPARAM)&cmdType,(LPARAM)&ackStatus);

 

66) CFileDialog 选中多个文件,文件名截断问题

CFileDialog dlg(TRUE,0,0,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_NOCHANGEDIR|OFN_ALLOWMULTISELECT,lpszFilter);

 

当选中多个文件时,文件名截断了,应该是文件的路径长度有限制;

 

 解决办法:定义一个大的Buff,window 默认文件长度最大为512,解决例子如下:

   

#define BUFFER_SIZE 16*1024

 //避免选择多个文件,文件名截断,定义一个大的Buff
 TCHAR    szLargeBuf[BUFFER_SIZE];
 memset(szLargeBuf,'\0',BUFFER_SIZE);

 //
 LPCTSTR lpszFilter=_T("data (*.data)|*.data|All Files (*.*)|*.*||");

 CFileDialog dlg(TRUE,0,0,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_NOCHANGEDIR|OFN_ALLOWMULTISELECT,lpszFilter);

 dlg.m_ofn.lpstrFile = szLargeBuf;

#ifdef UNICODE
 dlg.m_ofn.nMaxFile = BUFFER_SIZE;
#else
 dlg.m_ofn.nMaxFile = sizeof (szLargeBuf);

#endif

 //获取视频文件名
 if (dlg.DoModal() == IDOK)
 {

 

}

 

67)MFC 对话框程序进程不能退出的解决办法,在OnClose中加入:

  HANDLE hself = GetCurrentProcess();
TerminateProcess(hself, 0);

 

http://www.cnblogs.com/shootingstars/archive/2004/07/15/24602.aspx

 

 

68)vs2008 如何打包COM 并注册DLL

点击com的dll的右键,属性Register 选择vsdrfCOMSelfReg;

 

 

69)fatal error C1853: “Debug\***.pch”意外的预编译的头,只需重新运行编译器可能会解决此问题。
安装sp1的补丁;安装补丁   VS90SP1-KB976656-x86.exe

 

70)如何使主窗体最小化的时候,其非模态对话框不跟随它一起最小化;

创建非模态对话框时,将父窗口指定为桌面;GetDestopWindow();
 

 

71)包含CString的结构体不能使用了memcpy,因为CString是一个指针;

不然会造成指针越界等问题;

 

72)调用OnClose函数,如果其它线程正在操作MFC的控件,控件会死锁;

解决办法:使用Event,在操作控件的函数中设置SetEvent,然后在OnClose函数中等待信号;

void Public::WaitForThreadExit(HANDLE ExitHandle, int WaitTime)
{

 DWORD dwRet = 0;
 MSG msg;

 while (TRUE)
 {
  //wait for m_hThread to be over,and wait for  
  //QS_ALLINPUT(Any message is in the queue)

  dwRet = MsgWaitForMultipleObjects(1, &ExitHandle, FALSE, WaitTime, QS_ALLINPUT);

  switch (dwRet)
  {
  case WAIT_OBJECT_0:
   break; //break the loop  
  case WAIT_OBJECT_0 + 1:
   //get the message from Queue  
   //and dispatch it to specific window  
   PeekMessage(&msg, NULL, 0, 0, PM_REMOVE);
   DispatchMessage(&msg);
   continue;
  default:
   break; // unexpected failure  
  }
  break;
 }

 return;
}

 

 

73)MsgWaitForMultipleObjects不能正常等待线程退出?

MsgWaitForMultipleObjects不能正常等待线程退出,原因是开辟线程时,用的_beginThread,这个函数返回的不是一个有效的Handle;改为CreateThread,解决;

 

74)使用SVN提示“工作副本已经锁定”的解决办法

更新或者提交前执行一下clean up。如果在当前目录执行该命令后,仍然提示锁定,就到上一层目录再执行下...


 75)如何动态修改对话框标题栏的文字

CString strmsg;
 strmsg.LoadString(IDD_XXX_SET_DIALOG);
 this->SetWindowText(strmsg);

 

76)

MFC的listctrl控件中水平添加按钮并刷新

http://www.cppblog.com/Tim/archive/2014/05/10/206884.html

 

77)vsprintf.c buffer too small

sprintf_s 内存分配不够。


78)access 数据库插入数据报错

可能要安装一个数据库引擎 http://jingyan.baidu.com/article/7082dc1c504816e40b89bd6a.html

安装AccessDatabaseEngine(2007)版的开发程序包,下载链接http://www.microsoft.com/zh-cn/download/details.aspx?id=23734,安装后调试代码,顺利通过问题解决!


 

你可能感兴趣的:(vs2008 MFC 常见错误--新员工常犯的错误《二》!)