描述:
多谢关注!
本人的程序在一台机器上完成调试没有任何问题之后,拿到另外一个没有安装VC的机器上使用,程序出
错,提示:必需的资源无法得到
1.有人说:是需要包含VC的动态库,将MFC42D.DLL MSVCIRTD.DLL MSVCRTD.DLL等提示所需要的DLL文件拷贝到执行文件目录下,就可以了。
我将所有需要的dll文件都考过去了,不行。然后,甚至还拷贝一份全部的dll到VC的BIN目录下
重新编译后还是不行。
2.有人说:需要 ReleaseDC(&dc);
试过之后,还是失败。
3.有人说:2000下编的程序在98下使用或者是那个机子中毒了
不是的,两台机器都是2000server的,也肯定不是病毒的原因。唯一区别就是出错那台没有安装VC.
4有人说:建成Realease的版本
还是不行。任何版本都不行的。我都试过了/也用了动态或者静态链接重复试了很多次。
没办法,我就在那台机器上安装了VC,重新调试。发现运行到这里时:
CDataBackupDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();// 调试到这一行弹出了“必需的资源无法得到”
跟进之后是VC自带的东西了。
然后查这个类 CDataBackupDlg 似乎有点问题。
void CDataBackupDlg::OnShowWindow(BOOL bShow, UINT nStatus)
{
CDialog::OnShowWindow(bShow, nStatus);
CCommService::Instance()->m_Log.LogInit( "c:\\e-FAXbr" );
CCommService::Instance()->m_Log.SetDebugLevel( LEVEL_DEBUG_DETAIL );
CWnd *pWnd = GetDlgItem(IDC_EDIT_EFAXSERVERIP);
if( PathFileExists("c:\\faxserver") )
{
m_bIsLocal = TRUE;
if( pWnd )
pWnd->EnableWindow( FALSE );
}
else
{
m_bIsLocal = FALSE;
if( pWnd )
pWnd->EnableWindow( TRUE );
}
UpdateData( FALSE );
}
我把代码注销掉,然后一行一行的查。调试到了这一行时开始报错“必需的资源无法得到”
CCommService::Instance()->m_Log.LogInit( "c:\\e-FAXbr" );
解决方案1:
控件没有注册吧
解决方案2:程序好像没有问题,不知道什么问题?
解决方案3:将VC的动态库拷贝到windows目录下试试
解决方案4:记得某时,我也遇到这样的问题。就是把同样的程序换到打了SP5补丁的机器上出错。不过你这里的现象与当时不太一样。
解决方案5:gz
解决方案6:
static CCommService *m_pInstance;
最好不用static,这样我想不好。但无论如何,你在CCommService的析构函数中在
delete m_pInstance之后,要再
m_pInstance = NULL; 一下
在CCommService的构造函数中,对m_pInstance付值为NULL
我想你的问题有可能出在没有付值为NULL,然后第二次的时候,就会发现它不为NULL(但是,你在析构函数中已经delete了),于是Instance函数直接返回m_pInstance而实际上是不能用的,所以会出现错误
后面还要有一个指针的长度
真郁闷,没有看msdn
IsBadWritePtr(m_pInstance,sizeof(m_pInstance));
CCommService::Instance()->m_Log.LogInit( "c:\\e-FAXbr" );
显然是日志文件找不到。m_Log.LogInit中有打开文件的操作吧
c:\\e-FAXbr 需要 e-FAXbr 文件 拷贝到 c:\\