CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  ATL/ActiveX/COM

VC中调用ocx控件时遇到问题,牛人帮忙!!

楼主wanghaha(@#$)2006-08-10 14:11:02 在 VC/MFC / ATL/ActiveX/COM 提问

将控件导入工程,自动生成一个类,  
  这各类已经将原控件的属性封装出set..()与get..()函数,  
  但无法正常调用!!!  
   
  编译可以通过,但运行时不行,   报错是Debug   Assertion   Failed!   出错地方不在当前工程中,叫一个  
  winocc.cpp的系统文件中,不只是那里的问题???  
   
  第一次问,大家帮啊…………   等! 问题点数:66、回复次数:16Top

1 楼syy64(太平洋)回复于 2006-08-10 16:17:46 得分 0

你调试看看是哪一句引起的?Top

2 楼palmax(用上VS2005了)回复于 2006-08-10 16:59:24 得分 0

CxxxApp::InitInstance()  
  {  
          AfxEnableControlContainer();  
  }Top

3 楼wanghaha(@#$)回复于 2006-08-11 09:20:14 得分 0

错误就出在调用自动生成的类的方法时,  
  具体一点   自制一个card控件里面属性(如name,number)、方法(make,read)若干,  
  置入MFC工程后,自动生成CCard类,该类把属性全部封装只提供Set与Get方法,该类无构造方法(这一点也有小小疑惑-〉无法生成对象)  
  所以直接用CCard::SetName   调用,编译没问题(若是CCard::SetName(“xxx”)   则编译都过不了),在运行就出前面提到的错误。。。  
   
   
  楼上的  
  CxxxApp::InitInstance()  
  {  
          AfxEnableControlContainer();  
  }  
   
  原来就有……  
   
  再等!Top

4 楼palmax(用上VS2005了)回复于 2006-08-11 09:40:05 得分 8

生成ccard类的话,应该用create方法的吧,只要它是从cwnd类派生的,肯定有,即使ccard类里没显示Top

5 楼wanghaha(@#$)回复于 2006-08-11 09:47:55 得分 0

恩对   生成有creat方法如下  
    BOOL   Create(LPCTSTR   lpszWindowName,   DWORD   dwStyle,  
  const   RECT&   rect,   CWnd*   pParentWnd,   UINT   nID,  
  CFile*   pPersist   =   NULL,   BOOL   bStorage   =   FALSE,  
  BSTR   bstrLicKey   =   NULL)  
  {   return   CreateControl(GetClsid(),   lpszWindowName,   dwStyle,   rect,   pParentWnd,   nID,  
  pPersist,   bStorage,   bstrLicKey);   }  
   
  不会使   :(  
  以前用Java建这么多参数晕  
   
  可以给些办吗?     怎么去creat   再调用方法  
  Top

6 楼ssbelle(沉默的骆驼)回复于 2006-08-11 09:55:38 得分 0

CRect   rect(10,10,20,20);  
  INT   nID   =   0;  
  ocxitem->Create("",WS_CHILD|WS_VISIBLE,rect,this,nID);Top

7 楼wanghaha(@#$)回复于 2006-08-11 10:05:03 得分 0

 
  try\MakeCard.cpp(62)   :   error   C2065:   'ocxitem'   :   undeclared   identifier  
  MakeCard.cpp(62)   :   error   C2227:   left   of   '->Create'   must   point   to   class/struct/union  
  Error   executing   cl.exe.  
   
  稍微再系统点中不?  
   
  现在有点蒙,   即便编译通过   如何调用对象的方法      
   
  期待中……Top

8 楼syy64(太平洋)回复于 2006-08-11 10:18:30 得分 23

void   CCity3dctl1View::OnInitialUpdate()    
  {  
  CView::OnInitialUpdate();  
   
  //   TODO:   Add   your   specialized   code   here   and/or   call   the   base   class  
  // ³õʼ»¯¿Ø¼þ  
  int   iret;  
  RECT   rect;  
  CCity3dctl1Doc*   pDoc;  
   
  pDoc   =   GetDocument();  
  pDoc->SetTitle("ÕæÈýάµØÀíÐÅϢϵͳ£¨ä¯ÀÀ°æ£©");  
  GetClientRect(&rect);  
  iret   =   m_Show3dctl.CreateControl(m_Show3dctl.GetClsid(),   NULL,   WS_CHILD|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL,   rect,   this,   ID_SHOW3DCTL);  
  /// iret   =   m_Show3dctl.CreateControl(m_Show3dctl.GetClsid(),   NULL,   NULL);  
  if(iret==0)return;  
  m_Show3dctl.SetHMainWnd((long)m_hWnd);  
  m_bDraw   =   true;  
  /// m_Show3dctl.SetH.SetHMainDC.SetHMainWnd((long)m_hWnd);  
  // ÉèÖÃʱ¼äÆ÷  
  SetTimer(1,   50,   0);  
  ::MessageBox(NULL,   "³õʼ»¯Õý³£","Ìáʾ",   MB_OK);  
  }  
  Top

9 楼wanghaha(@#$)回复于 2006-08-11 10:44:12 得分 0

还是没有吸收太平洋的精华  
  m_Show3dctl是什么东东,我找不到与之等价的变量啊  
  这个操作放在视图类中吗  
   
  我一直在放ocx的对话框类下的ONOK()响应函数中   进行调用,   不对吗  
   
  望指正!!  
  Top

10 楼syy64(太平洋)回复于 2006-08-11 10:57:26 得分 0

m_Show3dctl是在文档视结构中,插入的我们自己开发的OCX控件的对象。Top

11 楼ssbelle(沉默的骆驼)回复于 2006-08-11 11:18:20 得分 0

try\MakeCard.cpp(62)   :   error   C2065:   'ocxitem'   :   undeclared   identifier  
  MakeCard.cpp(62)   :   error   C2227:   left   of   '->Create'   must   point   to   class/struct/union  
  Error   executing   cl.exe.  
  ---------------  
  你起码也得定义一下吧。。。。Top

12 楼wanghaha(@#$)回复于 2006-08-11 11:23:14 得分 0

能调了   不愧三颗星!  
   
  还有个结构上的小问题:  
  我的调用也写在void   CTryView::OnInitialUpdate()    
  中了,m_card即为m_Show3dctl,  
  比如调用m_card.AboutBox();运行起来上来先显示帮助对话框,后出窗口  
  而我需要,在窗口中的一个对话框中调用对象方法    
   
  计将安出?    
  Top

13 楼wanghaha(@#$)回复于 2006-08-11 11:34:46 得分 0

to骆驼:  
  这么定义的  
  CCard   card1;  
  CRect   rect(10,10,20,20);  
  INT   nID   =   0;  
  CCard->Create("",WS_CHILD|WS_VISIBLE,rect,this,nID);  
  报错:  
   
  error   C2143:   syntax   error   :   missing   ';'   before   '->'  
  error   C2143:   syntax   error   :   missing   ';'   before   '->'  
  Top

14 楼wanghaha(@#$)回复于 2006-08-11 11:38:31 得分 0

刚写错   :p  
  to骆驼:          
            这么定义的  
                    CCard   card1;  
  CRect   rect(10,10,20,20);  
  INT   nID   =   0;  
  card1->Create("",WS_CHILD|WS_VISIBLE,rect,this,nID);  
  报错:  
  try\MakeCard.cpp(84)   :   error   C2819:   type   'CCard'   does   not   have   an   overloaded   member   'operator   ->'  
                    :   see   declaration   of   'CCard'  
  try\MakeCard.cpp(84)   :   error   C2227:   left   of   '->Create'   must   point   to   class/struct/union  
  Error   executing   cl.exe.Top

15 楼ssbelle(沉默的骆驼)回复于 2006-08-11 12:19:30 得分 35

要是这样定义得card1.Create()  
  CCard*   card1   =   new   CCard1;  
  这样才card1->Create()  
  Top

16 楼wanghaha(@#$)回复于 2006-08-11 12:27:30 得分 0

谢谢骆驼  
   
  这是我要的!!!  
   
  准备结帖:)Top

相关问题

关键词

得分解答快速导航

  • 帖主:wanghaha
  • palmax
  • syy64
  • ssbelle

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo