由于本人一次最多只能出100分,所以再开一贴感谢各位大虾。问题真得很急在线急等!

解决方案 »

  1.   

    说了你不能直接传递你自定义的数据类型(类)
    你只能通过VARIANT 来间接传递。你在为控件定义属性的时候选择VARIANT类型,然后对VARIANT类型进行封装。你能把你的那个类的定义给我看看吗?
    如果你的类也有方法,那就要把类写成接口,如果只是传递简单数据就可以直接进行封装。
    我要看了你的类 才知道具体怎么封装。
      

  2.   

    这个CCapability很简单,只有capability、CapInfo两个Short型属性,还有一个返回BOOL的方法:EnableMethod()。那么如何封装?如果没有这个方法有如何直接封装?多谢
    wanilyer(缘随影去) !
    class CCapability : public CCmdTarget
    {
    DECLARE_DYNCREATE(CCapability) CCapability();           // protected constructor used by dynamic creation// Attributes
    public:// Operations
    public:// Overrides
    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CCapability)
    public:
    virtual void OnFinalRelease();
    //}}AFX_VIRTUAL// Implementation
    protected:
    virtual ~CCapability(); // Generated message map functions
    //{{AFX_MSG(CCapability)
    // NOTE - the ClassWizard will add and remove member functions here.
    //}}AFX_MSG DECLARE_MESSAGE_MAP()
    DECLARE_OLECREATE(CCapability) // Generated OLE dispatch map functions
    //{{AFX_DISPATCH(CCapability)
    short m_capability;
    afx_msg void OnCapabilityChanged();
    short m_conType;
    afx_msg void OnConTypeChanged();
    afx_msg BOOL EnableMethod();
    //}}AFX_DISPATCH
    DECLARE_DISPATCH_MAP()
    DECLARE_INTERFACE_MAP()
    };
      

  3.   

    http://www.vckbase.com/document/viewdoc/?id=1159
    http://www.vckbase.com/document/viewdoc/?id=1506
      

  4.   

    //自定义结构体
    typedef struct tagSNAPENVIRONMENT
    {
    CString str;
    int     data; }SNAPENVIRONMENT, FAR* LPSNAPENVIRONMENT; //---------------------------------------
    //传送自定义结构体
    //---------------------------------------
    //自定义结构体变量
    SNAPENVIRONMENT     *pSnapEnvi;   SAFEARRAY       FAR *pSafeArray = NULL;

    //SAFEARRAY(我也不知道该怎么翻译这个东西自己可以查查MSDN)范围声明
    //表示这个SAFEARRAY只能最多存放32个,当然可以改变它的大小让它存的更多
    SAFEARRAYBOUND       dimension[1];
    dimension[0].cElements = 32;
    dimension[0].lLbound   = 0; //创建SAFEARRAY
    pSafeArray = SafeArrayCreate( VT_BSTR, 1, dimension );

    //---------------------------------
    //准备读取数据,将你要的自定义结构的数据按如下方式写入,必须这样写入
    //---------------------------------
    ::SafeArrayAccessData( pSafeArray, (void HUGEP* FAR*)&pSnapEnvi ); for ( long i=0; i<32; i++ )
    {
    CString str;
    str.Format("%d", i);
    pSnapEnvi[ i].str = str;
    pSnapEnvi[ i].data = i;
    } //---------------------------------
    //写入结束保存
    //---------------------------------
    ::SafeArrayUnaccessData( pSafeArray );

    VARIANT val;
    val.vt     = VT_ARRAY;
    val.parray = pSafeArray; //这样你就可以给你的控件添加这样一个VARIANT属性下面是怎么取到VARIANT中的数据
    //----------------------------------------
    //接收自定义结构体,也是就是把VARIANT数据类型转换成你所想要的结构体
    //---------------------------------------
    SAFEARRAYBOUND dimension[1];
    SAFEARRAY FAR *pSafeArray = NULL;

    dimension[0].cElements = 32;
    dimension[0].lLbound   = 0;

    pSafeArray = SafeArrayCreate( VT_BSTR, 1, dimension );
    pSafeArray = val.parray; //自定义结构体变量
    SNAPENVIRONMENT     *pSnapEnvi;  

    //读取自定义结构体数据
    ::SafeArrayAccessData( pSafeArray, ( void HUGEP* FAR* )&pSnapEnvi );
    ::SafeArrayUnaccessData( pSafeArray );
      

  5.   

    对于你想传递既有方法 又有属性的自定义类,你可以把它写成一个COM组件。
    然后编译后得到*.tlb文件,然后在的控件里面导入 这个类型库文件,这样你的控件的属性就可以直接传递你的自定义接口。
      

  6.   

    对IDispatch 接口的实现 LPDispatch 属性:http://www.itcomputer.com.cn/Programs/VC/COM/200512/10656.html
      

  7.   

    将你自定义的类型转换成COM能接受的类型。