在COM里BSTR对应字符串,有CComBSTR类来干活、OLE_COLOR对应COLORREF,有OleTranslateColor()函数来进行OLE_COLOR和COLORREF之间的类型变换,现在问题是,那么ULONG、USHORT、OLE_XSIZE_PIXELS这些由什么来对应呢?难道直接使用?比如一个COM方法:HRESULT SetWindowSize(INT x, INT y)
{
  // 像下面一样直接使用INT类型的x、y?
  MoveWindow(0, 0, x, y);
}

解决方案 »

  1.   

    先谢谢jimsleon(蟋蟀)的回答,可是还是有疑问~~在COM里的COM类型的INT等于int?如果这样,那么OLE_COLOR为什么不能直接使用,而要在使用了OleTranslateColor()之后变成了COLORREF才能使用呢?OLE_COLOR和COLORREF的定义是一样的呀,都是:typedef DWORD OLE_COLOR、typedef DWORD COLORREF,为什么还要通过OleTranslateColor()来转换呢?谁知道为什么吗?
      

  2.   

    OLE_COLOR是vb提供的四个标准类型之一,OLE_COLOR 数据类型适用于返回颜色的属性。当属性被声明为 OLE_COLOR 时,“属性”窗口中会显示出一个颜色选取对话框,允许用户可视地为属性选择颜色,而不用记忆对应的数字表示。OLE_COLOR 在内部当作 Long 来处理。而COLORREF是vc的标准类型,COLORREF -- A 32-bit value used as a color value,LONG   A 32-bit signed integer.它们的内部类型不一样!所以要转换!
      

  3.   

    typedef long OLE_XPOS_PIXELS;
    typedef long OLE_YPOS_PIXELS;
    typedef long OLE_XSIZE_PIXELS;
    typedef long OLE_YSIZE_PIXELS;
    typedef float OLE_XPOS_CONTAINER;
    typedef float OLE_YPOS_CONTAINER;
    typedef float OLE_XSIZE_CONTAINER;
    typedef float OLE_YSIZE_CONTAINER;
      

  4.   

    aspnetwuxueyou(历史上的今天),我还是有问题
    typedef long OLE_XPOS_PIXELS;
    typedef long OLE_YPOS_PIXELS;
    typedef long OLE_XSIZE_PIXELS;
    typedef long OLE_YSIZE_PIXELS;
    typedef float OLE_XPOS_CONTAINER;
    typedef float OLE_YPOS_CONTAINER;
    typedef float OLE_XSIZE_CONTAINER;
    typedef float OLE_YSIZE_CONTAINER;
    上面是按像素计算的吧,如果窗口的属性不是按像素计算呢?还有如何使用上面定义的类型呢?不能直接当作long或者float使用吧?就像BSTR不能直接像字符串那样使用一样,虽然它的宏定义也是一个字符串。