CWinApp OpenDocumentFile "unsupported operation" 错误
CWinApp OpenDocumentFile "unsupported operation" error
问题
我正在尝试打开一个MFC程序,该程序读取Microsoft Access数据库(.mdb)并允许用户查看或修改数据。这是另一个实验室的一个小组给我的一个现有程序(和源代码),该程序在那里打开并运行良好。
在我们的实验室里,我还没有看到它正常加载。运行时,它会弹出一个对话框,显示"尝试了不支持的操作"。然后,Windows为我提供了一个在崩溃之前进行调试的机会。
环境
在另一个实验室,他们使用的是Windows7和MicrosoftOffice2010,而且效果良好。
在我们的实验室里,我试过Office 2013的Windows 7和Office 2010的Windows XP。后者在没有给我对话框的情况下崩溃了。我不知道我们是否有Win7/MSO2010机器。
函数
我有这个程序的源代码。解决方案文件表明它上次开发是在VS2010,我测试的计算机也安装了它。从Visual Studio 2010或直接从可执行文件中运行它会产生相同的结果。
我在代码中添加了额外的调试对话框,将问题缩小到这个函数调用,代码永远不会通过:
CwinApp:OpenDocumentFile(LPCTSTR lpszPathName)
传递到函数中的单个字符串是要打开的MS Access数据库的路径和文件名。它存在于另一个程序创建的临时目录中。这是在C以外的驱动器上,尽管我也在那里测试过一些。与此相关的程序问题通常源于"只读"状态的文件,但我会不断检查创建的临时文件,它们是可写的。
文件
我通过另一个SO问题找到了VS2010的标题为"打破Visual C++中的变化"的信息:
一个新的虚拟函数被添加到CDocTemplate类中。这个新的虚拟函数是CDocTemplate::OpenDocumentFile。以前版本的OpenDocumentFile有两个参数。新版本有三个参数。为了支持重启管理器,任何从CDocTemplate派生的类都必须实现具有三个参数的版本。有关该函数的更多信息,请参阅CDocTemplate::OpenDocumentFile。新参数为bAddToMRU。
代码
我觉得这可能就是答案!但我不太清楚到底该改变什么才能让它发挥作用。这是我停下来的地方:
程序.cpp
CDocument* ProgramApp::OpenDocumentFile(LPCTSTR lpszFileName, BOOL bAddToLRU, BOOL bMakeVisible)
{
// Add specialized code here and/or call base class
// Debug messages added
CDocument* tempDoc;
AfxMessageBox(lpszFileName);
tempDoc = CWinApp::OpenDocumentFile(lpszFileName, bAddToMRU);
AfxMessageBox("Opened database!");
return tempDoc;
}
程序.h
class ProgramApp : public CWinApp
{
public:
...
virtual CDocument* OpenDocumentFile(LPCTSTR lpszFileName, BOOL bAddToMRU, BOOL bMakeVisible);
afxwin.h
class CWinApp : public CWinThread
{
...
virtual CDocument* OpenDocumentFile(LPCTSTR lpszFileName);
virtual CDocument* OpenDocumentFile(LPCTSTR lpszFileName, BOOL bAddToMRU);
将Program.cpp调用更改为"Template"类会导致错误,但如果这是正确的答案,我也不会感到惊讶。这个解决方案看起来很相似,但我不确定该怎么办
我希望这个问题有一个简单的解决方案,有知识的人可以给我。我会非常感激,额外的背景会有很大帮助。
编辑:调试
我深入研究了Windows代码,看看到底出了什么问题。它似乎太密集了,无法理解,但我和一位同事可能有基于它的线索。故障信息发生在这里:
dlgdata.cpp
// Could be a windowless OCX
pSite = m_pDlgWnd->GetOldControlSite(nIDC);
if (pSite == NULL)
{
TRACE(traceAppMsg, 0, "Error: no data exchange control with ID 0x%04x.n", nIDC);
ASSERT(FALSE);
AfxThrowNotSupportedException();
}
尽管我们在这里看到了调试器问题:
occcont.cpp
COleControlSiteOrWnd *pemp = new COleControlSiteOrWnd(hwndCtrl, pOccDlgInfo->m_pItemInfo[i].bAutoRadioButton);
ASSERT(IsWindow(pTemp->m_hWnd));
if (IsWindow(pTemp->m_hWnd))
{
hwndStart = pTemp->m_hWnd;
...
我的同事认为,这可能与我怀疑的打开这份文件没有多大关系,更多的是与我们实验室计算机上没有的试图用于该程序的对象/控件有关。
我在opendocumentfile()中遇到了同样的问题,CFormView类中有一个控件我没有使用,所以我把它注释掉了,但忘记了从.rc文件中删除。一旦我从.rc文件中删除了控制项,问题就消失了。
不应该有取消初始化的控制变量,请检查
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- CWinApp OpenDocumentFile "unsupported operation" 错误
- 尝试等待 boost::condition_Variable 时出现"unique_lock has no mutex: Operation not permitted"错误
- 当所有 Windows 应用尝试使用 TCP 套接字时,我的应用导致错误 - 收到"operation on a socket could not be performed because..." (
- glBindFramebuffer 在使用 GL_DRAW_FRAMEBUFFER 目标时会导致 "invalid operation" GL 错误
- SQL Server Compact Edition 3.5 为简单查询提供"Multiple-step operation generated errors"错误
- 抑制套接字"Operation not permitted"错误