none
C++ ActiveX vs 2010编译 错误 error C2065: “m_VideoDlg”: 未声明的标识符_ RRS feed

  • 问题

  • 参考博客:http://blog.csdn.net/longhuahaha/article/details/8556964 建立工程编译时出现

    工具:vs2010 os:win xp

    // TestMfcAltDebugCtrl.cpp : CTestMfcAltDebugCtrl ActiveX 控件类的实现。 #include "stdafx.h" #include "TestMfcAltDebug.h" #include "TestMfcAltDebugCtrl.h" #include "TestMfcAltDebugPropPage.h" #include "afxdialogex.h" #ifdef _DEBUG #define new DEBUG_NEW #endif IMPLEMENT_DYNCREATE(CTestMfcAltDebugCtrl, COleControl) // 消息映射 BEGIN_MESSAGE_MAP(CTestMfcAltDebugCtrl, COleControl) ON_OLEVERB(AFX_IDS_VERB_PROPERTIES, OnProperties) ON_WM_CREATE() ON_WM_SIZE() END_MESSAGE_MAP() // 调度映射 BEGIN_DISPATCH_MAP(CTestMfcAltDebugCtrl, COleControl) DISP_FUNCTION_ID(CTestMfcAltDebugCtrl, "AboutBox", DISPID_ABOUTBOX, AboutBox, VT_EMPTY, VTS_NONE) DISP_FUNCTION_ID(CTestMfcAltDebugCtrl, "Fuck2", dispidFuck2, Fuck2, VT_EMPTY, VTS_NONE) END_DISPATCH_MAP() // 事件映射 BEGIN_EVENT_MAP(CTestMfcAltDebugCtrl, COleControl) END_EVENT_MAP() // 属性页 // TODO: 按需要添加更多属性页。请记住增加计数! BEGIN_PROPPAGEIDS(CTestMfcAltDebugCtrl, 1) PROPPAGEID(CTestMfcAltDebugPropPage::guid) END_PROPPAGEIDS(CTestMfcAltDebugCtrl) // 初始化类工厂和 guid IMPLEMENT_OLECREATE_EX(CTestMfcAltDebugCtrl, "TESTMFCALTDEBUG.TestMfcAltDebugCtrl.1", 0x666f7fb9, 0x4799, 0x463d, 0x9d, 0x3, 0x1f, 0x61, 0x71, 0x8, 0xc5, 0xe3) // 键入库 ID 和版本 IMPLEMENT_OLETYPELIB(CTestMfcAltDebugCtrl, _tlid, _wVerMajor, _wVerMinor) // 接口 ID const IID IID_DTestMfcAltDebug = { 0x2B9E7A8C, 0x707A, 0x4495, { 0xB5, 0xAF, 0x94, 0x10, 0x1A, 0x78, 0xC5, 0xBE } }; const IID IID_DTestMfcAltDebugEvents = { 0x9A1A9D39, 0x6ED4, 0x429A, { 0x8D, 0x6A, 0x88, 0x49, 0x4D, 0x90, 0x29, 0xDA } }; // 控件类型信息 static const DWORD _dwTestMfcAltDebugOleMisc = OLEMISC_ACTIVATEWHENVISIBLE | OLEMISC_SETCLIENTSITEFIRST | OLEMISC_INSIDEOUT | OLEMISC_CANTLINKINSIDE | OLEMISC_RECOMPOSEONRESIZE; IMPLEMENT_OLECTLTYPE(CTestMfcAltDebugCtrl, IDS_TESTMFCALTDEBUG, _dwTestMfcAltDebugOleMisc) // CTestMfcAltDebugCtrl::CTestMfcAltDebugCtrlFactory::UpdateRegistry - // 添加或移除 CTestMfcAltDebugCtrl 的系统注册表项 BOOL CTestMfcAltDebugCtrl::CTestMfcAltDebugCtrlFactory::UpdateRegistry(BOOL bRegister) { // TODO: 验证您的控件是否符合单元模型线程处理规则。 // 有关更多信息,请参考 MFC 技术说明 64。 // 如果您的控件不符合单元模型规则,则 // 必须修改如下代码,将第六个参数从 // afxRegApartmentThreading 改为 0。 if (bRegister) return AfxOleRegisterControlClass( AfxGetInstanceHandle(), m_clsid, m_lpszProgID, IDS_TESTMFCALTDEBUG, IDB_TESTMFCALTDEBUG, afxRegApartmentThreading, _dwTestMfcAltDebugOleMisc, _tlid, _wVerMajor, _wVerMinor); else return AfxOleUnregisterClass(m_clsid, m_lpszProgID); } // CTestMfcAltDebugCtrl::CTestMfcAltDebugCtrl - 构造函数 CTestMfcAltDebugCtrl::CTestMfcAltDebugCtrl() { InitializeIIDs(&IID_DTestMfcAltDebug, &IID_DTestMfcAltDebugEvents); // TODO: 在此初始化控件的实例数据。 } // CTestMfcAltDebugCtrl::~CTestMfcAltDebugCtrl - 析构函数 CTestMfcAltDebugCtrl::~CTestMfcAltDebugCtrl() { // TODO: 在此清理控件的实例数据。 } // CTestMfcAltDebugCtrl::OnDraw - 绘图函数 void CTestMfcAltDebugCtrl::OnDraw( CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid) { if (!pdc) return; // TODO: 用您自己的绘图代码替换下面的代码。 pdc->FillRect(rcBounds, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH))); pdc->Ellipse(rcBounds); } // CTestMfcAltDebugCtrl::DoPropExchange - 持久性支持 void CTestMfcAltDebugCtrl::DoPropExchange(CPropExchange* pPX) { ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor)); COleControl::DoPropExchange(pPX); // TODO: 为每个持久的自定义属性调用 PX_ 函数。 } // CTestMfcAltDebugCtrl::OnResetState - 将控件重置为默认状态 void CTestMfcAltDebugCtrl::OnResetState() { COleControl::OnResetState(); // 重置 DoPropExchange 中找到的默认值 // TODO: 在此重置任意其他控件状态。 } // CTestMfcAltDebugCtrl::AboutBox - 向用户显示“关于”框 void CTestMfcAltDebugCtrl::AboutBox() { CDialogEx dlgAbout(IDD_ABOUTBOX_TESTMFCALTDEBUG); dlgAbout.DoModal(); } // CTestMfcAltDebugCtrl 消息处理程序 void CTestMfcAltDebugCtrl::Fuck2(void) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); // TODO: 在此添加调度处理程序代码 } int CTestMfcAltDebugCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (COleControl::OnCreate(lpCreateStruct) == -1) return -1; // TODO: 在此添加您专用的创建代码 m_VideoDlg.Create(IDC_STATIC ,this); // 刚刚创建的对话框 return 0; } void CTestMfcAltDebugCtrl::OnSize(UINT nType, int cx, int cy) { COleControl::OnSize(nType, cx, cy); // TODO: 在此处添加消息处理程序代码 RECT activeXRect; GetClientRect(&activeXRect); m_VideoDlg.MoveWindow(&activeXRect); }

    错误 4 error C2065: “m_VideoDlg”: 未声明的标识符 d:\code project\c#\testmfcaltdebug\testmfcaltdebug\testmfcaltdebugctrl.cpp 199 1 TestMfcAltDebug
    错误 6 error C2065: “m_VideoDlg”: 未声明的标识符 d:\code project\c#\testmfcaltdebug\testmfcaltdebug\testmfcaltdebugctrl.cpp 212 1 TestMfcAltDebug
    错误 1 error C2146: 语法错误: 缺少“;”(在标识符“m_VideoDlg”的前面) d:\code project\c#\testmfcaltdebug\testmfcaltdebug\testmfcaltdebugctrl.h 15 1 TestMfcAltDebug
    错误 5 error C2228: “.Create”的左边必须有类/结构/联合 d:\code project\c#\testmfcaltdebug\testmfcaltdebug\testmfcaltdebugctrl.cpp 199 1 TestMfcAltDebug
    错误 7 error C2228: “.MoveWindow”的左边必须有类/结构/联合 d:\code project\c#\testmfcaltdebug\testmfcaltdebug\testmfcaltdebugctrl.cpp 212 1 TestMfcAltDebug
    错误 2 error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int d:\code project\c#\testmfcaltdebug\testmfcaltdebug\testmfcaltdebugctrl.h 15 1 TestMfcAltDebug
    错误 3 error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int d:\code project\c#\testmfcaltdebug\testmfcaltdebug\testmfcaltdebugctrl.h 15 1 TestMfcAltDebug

    2016年8月14日 8:31

答案

  • CTestMfcAltDebugCtrl类中有定义CXXX m_VideoDlg;类成员变量吗?另外你的CTestMfcAltDebugCtrl类相关的.h头文件中有#include m_VideoDlg对应类的.h文件吗?

    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    • 已建议为答案 Baron Bi 2016年8月15日 8:54
    • 已标记为答案 Baron Bi 2016年9月7日 6:35
    2016年8月15日 3:06
    版主
  • Hi henrytien,

    感谢在MSDN论坛发帖。

    将声明和定义m_VideoDlg的头文件包含到你的cpp文件里。并且查看m_VideoDlg所在类中是否有可用成员函数Create和MoveWindow。

    Best Regards,

    Sera Yu


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.

    • 已建议为答案 Baron Bi 2016年9月7日 6:35
    • 已标记为答案 Baron Bi 2016年9月7日 6:35
    2016年8月15日 8:54

全部回复

  • 变量m_VideoDlg未定义

    例子

    class Test

    {

        //VideoDlg m_VideoDlg;

        public void Test()

       {

           m_VideoDlg.Test();// 这里会提示变量m_VideoDlg未定义

        }

    }


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2016年8月14日 23:57
  • CTestMfcAltDebugCtrl类中有定义CXXX m_VideoDlg;类成员变量吗?另外你的CTestMfcAltDebugCtrl类相关的.h头文件中有#include m_VideoDlg对应类的.h文件吗?

    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    • 已建议为答案 Baron Bi 2016年8月15日 8:54
    • 已标记为答案 Baron Bi 2016年9月7日 6:35
    2016年8月15日 3:06
    版主
  • Hi henrytien,

    感谢在MSDN论坛发帖。

    将声明和定义m_VideoDlg的头文件包含到你的cpp文件里。并且查看m_VideoDlg所在类中是否有可用成员函数Create和MoveWindow。

    Best Regards,

    Sera Yu


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.

    • 已建议为答案 Baron Bi 2016年9月7日 6:35
    • 已标记为答案 Baron Bi 2016年9月7日 6:35
    2016年8月15日 8:54