none
vs2008 MFC 工程添加ActiveX控件后, 其方法正常, 但是属性都消失了 RRS feed

  • 问题

  • 跟vc6一样的操作

    项目->添加类->MFC ActiveX控件->选择控件->完成.

    生成的 .h文件中的控件属性没有生成.

     

    多台电脑试验都没有生成,包括有升sp1的.

    2008年9月19日 7:49

答案

全部回复

  • 说的可能比较听得比较模糊,我给个例子:

    新建一个testocx的OCX工程。

    添加2个属性,一个方法。编译注册。

    新建一个MFC工程。

     

    项目->添加类->MFC ActiveX控件->选择刚才的testocx.ocx->完成.

    // CDtestocx.h : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的声明

     

    方法有自动生成,但是属性没有了。
    2008年9月19日 8:07
  • MFC工程,添加类,添加一个activex控件后,生成了这个控件的一个类,方法的列表生成了,但是却没法生成这个ocx的属性列表,

    2008年9月23日 2:20
  • 看看是不是只生成一个类。一般都有别的类可以选的
    2008年9月23日 14:01
    版主
  •  

    在以下操作系统上测试

    vista ultimate 32bit sp1 oem - visual studio 2008 team suit

    vista ultimate 32bit sp1 oem - visual studio 2008 team suit sp1

    vista ultimate 64bit sp1 oem - visual studio 2008 team suit

    vista ultimate 64bit sp1 oem - visual studio 2008 team suit sp1 

    xp pro 32bit sp3 oem - visual studio 2008 team suit

    xp pro 32bit sp3 oem - visual studio 2008 team suit sp1

    结果都一样, 都是成功生成该ocx的类,其中方法都生成了, 属性列表均未生成.

     

    版主, 如果有需要, 可以联系我, QQ: 602279240

    我电脑配置, thinkpad t61p ,cpu T9500, 内存 ddr2-667-2G x2, vista ultimate 64bit sp1.

    2008年9月24日 5:55
  • 我在用VS2008添加MFC的类的时候,选择了Microsoft Web Browser,生成了两个类,CWebBrowser和CWebBrowser2。类里面并不缺少属性和方法。
    照本VC教程看看,或者把你的步骤描述清楚。
    2008年9月24日 13:20
    版主
  •  

    先新建一个mfc工程

    文件->新建->项目->visual c++->mfc->mfc程序->随意一个名称->一直next到创建完;

     

    然后

    项目->添加类->mfc->activex控件中的mfc类->从注册表或从文件都可以->添加所有接口->完成

     

    会生成这个ocx的class,包含了入口信息,ocx方法和属性,其中

    方法列表都生成了,属性列表为空( 没生成)

    2008年9月25日 1:57
  •  

    // CWebBrowser.h : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的声明

    #pragma once

    /////////////////////////////////////////////////////////////////////////////
    // CWebBrowser

    class CWebBrowser : public CWnd
    {
    protected:
     DECLARE_DYNCREATE(CWebBrowser)
    public:
     CLSID const& GetClsid()
     {
      static CLSID const clsid
       = { 0x8856F961, 0x340A, 0x11D0, { 0xA9, 0x6B, 0x0, 0xC0, 0x4F, 0xD7, 0x5, 0xA2 } };
      return clsid;
     }
     virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle,
          const RECT& rect, CWnd* pParentWnd, UINT nID,
          CCreateContext* pContext = NULL)
     {
      return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID);
     }

        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);
     }

    // 属性
    public:

    // 操作
    public:

     void GoBack()
     {
      InvokeHelper(0x64, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
     }
     void GoForward()
     {
      InvokeHelper(0x65, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
     }
     void GoHome()
     {
      InvokeHelper(0x66, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
     }
     void GoSearch()
     {
      InvokeHelper(0x67, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
     }
     void Navigate(LPCTSTR URL, VARIANT * Flags, VARIANT * TargetFrameName, VARIANT * PostData, VARIANT * Headers)
     {
      static BYTE parms[] = VTS_BSTR VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT ;
      InvokeHelper(0x68, DISPATCH_METHOD, VT_EMPTY, NULL, parms, URL, Flags, TargetFrameName, PostData, Headers);
     }
     void Refresh()
     {
      InvokeHelper(DISPID_REFRESH, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
     }
     void Refresh2(VARIANT * Level)
     {
      static BYTE parms[] = VTS_PVARIANT ;
      InvokeHelper(0x69, DISPATCH_METHOD, VT_EMPTY, NULL, parms, Level);
     }
     void Stop()
     {
      InvokeHelper(0x6a, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
     }
     LPDISPATCH get_Application()
     {
      LPDISPATCH result;
      InvokeHelper(0xc8, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
      return result;
     }
     LPDISPATCH get_Parent()
     {
      LPDISPATCH result;
      InvokeHelper(0xc9, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
      return result;
     }
     LPDISPATCH get_Container()
     {
      LPDISPATCH result;
      InvokeHelper(0xca, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
      return result;
     }
     LPDISPATCH get_Document()
     {
      LPDISPATCH result;
      InvokeHelper(0xcb, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
      return result;
     }
     BOOL get_TopLevelContainer()
     {
      BOOL result;
      InvokeHelper(0xcc, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
      return result;
     }
     CString get_Type()
     {
      CString result;
      InvokeHelper(0xcd, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
      return result;
     }
     long get_Left()
     {
      long result;
      InvokeHelper(0xce, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
      return result;
     }
     void put_Left(long newValue)
     {
      static BYTE parms[] = VTS_I4 ;
      InvokeHelper(0xce, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
     }
     long get_Top()
     {
      long result;
      InvokeHelper(0xcf, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
      return result;
     }
     void put_Top(long newValue)
     {
      static BYTE parms[] = VTS_I4 ;
      InvokeHelper(0xcf, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
     }
     long get_Width()
     {
      long result;
      InvokeHelper(0xd0, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
      return result;
     }
     void put_Width(long newValue)
     {
      static BYTE parms[] = VTS_I4 ;
      InvokeHelper(0xd0, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
     }
     long get_Height()
     {
      long result;
      InvokeHelper(0xd1, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
      return result;
     }
     void put_Height(long newValue)
     {
      static BYTE parms[] = VTS_I4 ;
      InvokeHelper(0xd1, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
     }
     CString get_LocationName()
     {
      CString result;
      InvokeHelper(0xd2, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
      return result;
     }
     CString get_LocationURL()
     {
      CString result;
      InvokeHelper(0xd3, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
      return result;
     }
     BOOL get_Busy()
     {
      BOOL result;
      InvokeHelper(0xd4, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
      return result;
     }


    };

    其中属性列表为空.

    2008年9月25日 2:00
  • 属性列表都未生成, 测试的电脑上包括了刚安装vs2008和已安装的.均为这种情况.

    2008年9月25日 2:02
  • DISPATCH_PROPERTYGET或者DISPATCH_PROPERTYPUT的是属性
    2008年9月25日 3:24
    版主
  •  

    // Machine generated IDispatch wrapper class(es) created by Microsoft Visual C++

    // NOTE: Do not modify the contents of this file.  If this class is regenerated by
    //  Microsoft Visual C++, your modifications will be overwritten.

    /////////////////////////////////////////////////////////////////////////////
    // CFileOCR wrapper class

    class CFileOCR : public CWnd
    {
    protected:
     DECLARE_DYNCREATE(CFileOCR)
    public:
     CLSID const& GetClsid()
     {
      static CLSID const clsid
       = { 0x981ff654, 0xd1d6, 0x4f5f, { 0xbf, 0x98, 0x4d, 0x10, 0x2c, 0xfd, 0xe9, 0x82 } };
      return clsid;
     }
     virtual BOOL Create(LPCTSTR lpszClassName,
      LPCTSTR lpszWindowName, DWORD dwStyle,
      const RECT& rect,
      CWnd* pParentWnd, UINT nID,
      CCreateContext* pContext = NULL)
     { return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID); }

        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); }

    // Attributes
    public:
     CString GetType();
     void SetType(LPCTSTR);
     CString GetCountrycode();
     void SetCountrycode(LPCTSTR);
     CString GetPassportno();
     void SetPassportno(LPCTSTR);
     CString GetSurname();
     void SetSurname(LPCTSTR);
     CString GetGivenames();
     void SetGivenames(LPCTSTR);
     CString GetSex();
     void SetSex(LPCTSTR);
     CString GetNationality();
     void SetNationality(LPCTSTR);
     CString GetBirthdate();
     void SetBirthdate(LPCTSTR);
     CString GetExpirydate();
     void SetExpirydate(LPCTSTR);
     CString GetIssueplace();
     void SetIssueplace(LPCTSTR);
     CString GetMachinecodes1();
     void SetMachinecodes1(LPCTSTR);
     CString GetStatus();
     void SetStatus(LPCTSTR);
     CString GetMachinecodes2();
     void SetMachinecodes2(LPCTSTR);
     CString GetName();
     void SetName(LPCTSTR);
     long GetWidth();
     void SetWidth(long);
     long GetHeight();
     void SetHeight(long);
     long GetPhotowidth();
     void SetPhotowidth(long);
     long GetPhotoheight();
     void SetPhotoheight(long);
     CString GetEgivenname();
     void SetEgivenname(LPCTSTR);
     CString GetEsurname();
     void SetEsurname(LPCTSTR);
     CString GetPhoto();
     void SetPhoto(LPCTSTR);
     long GetMRleft();
     void SetMRleft(long);
     long GetMRtop();
     void SetMRtop(long);
     long GetMRwidth();
     void SetMRwidth(long);
     long GetMRheight();
     void SetMRheight(long);
     long GetPhotoleft();
     void SetPhotoleft(long);
     long GetPhototop();
     void SetPhototop(long);
     CString GetBirthplace();
     void SetBirthplace(LPCTSTR);
     CString GetIssuepartment();
     void SetIssuepartment(LPCTSTR);
     CString GetIssueplaceCode();
     void SetIssueplaceCode(LPCTSTR);
     long GetState();
     void SetState(long);
     CString GetJob();
     void SetJob(LPCTSTR);

    // Operations
    public:
     long Init();
     long OpenFile(LPCTSTR filename);
     long Stretch(long hDC, long XDest, long YDest, long nDestWidth, long nDestHeight, long XSrc, long YSrc, long nSrcWidth, long nSrcHeight, long iUsage, long dwRop);
     long StretchPhoto(long hDC, long XDest, long YDest, long nDestWidth, long nDestHeight, long XSrc, long YSrc, long nSrcWidth, long nSrcHeight, long iUsage, long dwRop);
     long OpenBuf(short* pBuf, long w, long h);
     void AboutBox();
    };

    vc6生成的.

    2008年9月25日 5:45
  •  

    // CDFileOCR.h : 由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的声明

    #pragma once

    /////////////////////////////////////////////////////////////////////////////
    // CDFileOCR

    class CDFileOCR : public CWnd
    {
    protected:
     DECLARE_DYNCREATE(CDFileOCR)
    public:
     CLSID const& GetClsid()
     {
      static CLSID const clsid
       = { 0x981FF654, 0xD1D6, 0x4F5F, { 0xBF, 0x98, 0x4D, 0x10, 0x2C, 0xFD, 0xE9, 0x82 } };
      return clsid;
     }
     virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle,
          const RECT& rect, CWnd* pParentWnd, UINT nID,
          CCreateContext* pContext = NULL)
     {
      return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID);
     }

        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);
     }

    // 属性
    public:

    // 操作
    public:

     long Init()
     {
      long result;
      InvokeHelper(0x21, DISPATCH_METHOD, VT_I4, (void*)&result, NULL);
      return result;
     }
     long OpenFile(LPCTSTR filename)
     {
      long result;
      static BYTE parms[] = VTS_BSTR ;
      InvokeHelper(0x22, DISPATCH_METHOD, VT_I4, (void*)&result, parms, filename);
      return result;
     }
     long Stretch(long hDC, long XDest, long YDest, long nDestWidth, long nDestHeight, long XSrc, long YSrc, long nSrcWidth, long nSrcHeight, long iUsage, long dwRop)
     {
      long result;
      static BYTE parms[] = VTS_I4 VTS_I4 VTS_I4 VTS_I4 VTS_I4 VTS_I4 VTS_I4 VTS_I4 VTS_I4 VTS_I4 VTS_I4 ;
      InvokeHelper(0x23, DISPATCH_METHOD, VT_I4, (void*)&result, parms, hDC, XDest, YDest, nDestWidth, nDestHeight, XSrc, YSrc, nSrcWidth, nSrcHeight, iUsage, dwRop);
      return result;
     }
     long StretchPhoto(long hDC, long XDest, long YDest, long nDestWidth, long nDestHeight, long XSrc, long YSrc, long nSrcWidth, long nSrcHeight, long iUsage, long dwRop)
     {
      long result;
      static BYTE parms[] = VTS_I4 VTS_I4 VTS_I4 VTS_I4 VTS_I4 VTS_I4 VTS_I4 VTS_I4 VTS_I4 VTS_I4 VTS_I4 ;
      InvokeHelper(0x24, DISPATCH_METHOD, VT_I4, (void*)&result, parms, hDC, XDest, YDest, nDestWidth, nDestHeight, XSrc, YSrc, nSrcWidth, nSrcHeight, iUsage, dwRop);
      return result;
     }
     long OpenBuf(short * pBuf, long w, long h)
     {
      long result;
      static BYTE parms[] = VTS_PI2 VTS_I4 VTS_I4 ;
      InvokeHelper(0x25, DISPATCH_METHOD, VT_I4, (void*)&result, parms, pBuf, w, h);
      return result;
     }
     void AboutBox()
     {
      InvokeHelper(DISPID_ABOUTBOX, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
     }


    };
    vs2008生成的.

    2008年9月25日 5:46
  •  

    可以看出Attributes列表 vs2008没有生成嘛~
    2008年9月25日 5:47
  • 用CWnd::GetControllingUnknown返回控件的接口,之后看看是不是能传给MFC类向导生成的COleDispatchDriver派生的类
    MSMVP VC++
    2009年2月3日 5:04
    版主