我是用CB做的控件,那边论坛没这边的高手多、人气旺,反正原理都差不多,所以转到这来问问看。我的ActiveX控件有一个方法,参数是一个结构指针,编译安装好后,在CB中新建另一个工程,去使用它完全没有问题。
后来我又在控件中加了一个事件,同样是用这个结构指针做为参数,却编译不过去。这是为什么呢?事件和方法都是暴露给用户使用的接口,真是没想到还有这么大差别啊!我看编译时的错误提示说是无法把那个类型转成TVarient的,难道事件除了基本数据类型外,只能用TVarient类型的参数吗?

解决方案 »

  1.   

    自定义结构指针:automation不兼容类型。
      

  2.   

    什么类型是automation兼容类型?可以自定义出一个automation兼容的结构出来吗?
      

  3.   

    VARIANT结构里的一个union有的类型。
    union {
          Byte                    bVal;                 // VT_UI1.
          Short                   iVal;                 // VT_I2.
          long                    lVal;                 // VT_I4.
          float                   fltVal;               // VT_R4.
          double                  dblVal;               // VT_R8.
          VARIANT_BOOL            boolVal;              // VT_BOOL.
          SCODE                   scode;                // VT_ERROR.
          CY                      cyVal;                // VT_CY.
          DATE                    date;                 // VT_DATE.
          BSTR                    bstrVal;              // VT_BSTR.
          DECIMAL                 FAR* pdecVal          // VT_BYREF|VT_DECIMAL.
          IUnknown                FAR* punkVal;         // VT_UNKNOWN.
          IDispatch               FAR* pdispVal;        // VT_DISPATCH.
          SAFEARRAY               FAR* parray;          // VT_ARRAY|*.
          Byte                    FAR* pbVal;           // VT_BYREF|VT_UI1.
          short                   FAR* piVal;           // VT_BYREF|VT_I2.
          long                    FAR* plVal;           // VT_BYREF|VT_I4.
          float                   FAR* pfltVal;         // VT_BYREF|VT_R4.
          double                  FAR* pdblVal;         // VT_BYREF|VT_R8.
          VARIANT_BOOL            FAR* pboolVal;        // VT_BYREF|VT_BOOL.
          SCODE                   FAR* pscode;          // VT_BYREF|VT_ERROR.
          CY                      FAR* pcyVal;          // VT_BYREF|VT_CY.
          DATE                    FAR* pdate;           // VT_BYREF|VT_DATE.
          BSTR                    FAR* pbstrVal;        // VT_BYREF|VT_BSTR.
          IUnknown                FAR* FAR* ppunkVal;   // VT_BYREF|VT_UNKNOWN.
          IDispatch               FAR* FAR* ppdispVal;  // VT_BYREF|VT_DISPATCH.
          SAFEARRAY               FAR* FAR* pparray;    // VT_ARRAY|*.
          VARIANT                 FAR* pvarVal;         // VT_BYREF|VT_VARIANT.
          void                    FAR* byref;           // Generic ByRef.
          char                    cVal;                 // VT_I1.
          unsigned short          uiVal;                // VT_UI2.
          unsigned long           ulVal;                // VT_UI4.
          int                     intVal;               // VT_INT.
          unsigned int            uintVal;              // VT_UINT.
          char FAR *              pcVal;                // VT_BYREF|VT_I1.
          unsigned short FAR *    puiVal;               // VT_BYREF|VT_UI2.
          unsigned long FAR *     pulVal;               // VT_BYREF|VT_UI4.
          int FAR *               pintVal;              // VT_BYREF|VT_INT.
          unsigned int FAR *      puintVal;             //VT_BYREF|VT_UINT.
    };
    让你的结构从IUnknown继承试试。