_variant_t temp;
temp.vt = VT_UI4;
long test = -1;
DWORD startPosition = (DWORD)test;
        memcpy(&temp, &startPosition,4);

DWORD me = temp.ulVal;
发现me的值和startPosition 的值居然不同了。郁闷!

解决方案 »

  1.   

    temp.vt = VT_UI4;
    temp.ulVal = -1;
    or
    _variant_t temp((long)-1);typedef struct tagVARIANT  {
       VARTYPE vt;
       unsigned short wReserved1;
       unsigned short wReserved2;
       unsigned short wReserved3;
    ...}
    memcpy(...)把vt和wReserved1给overlapped.
      

  2.   

    没看明白,不过我刚才是了另一种方法:
    _variant_t temp;
    temp.vt = VT_UI4;
    long test = -1;
    DWORD startPosition = (DWORD)test;
            memcpy(&temp, &startPosition,4);

    DWORD me = temp.ulVal;
      

  3.   

    没看明白,不过我刚才是了另一种方法:
    _variant_t temp;
    temp.vt = VT_UI4;
    long test = -1;
    DWORD m_startPosition = (DWORD)test;
    int len = sizeof(VARTYPE);
    memcpy(&temp.ulVal, &m_startPosition,4);

    DWORD me = temp.ulVal;
    结果是对的
      

  4.   

    memcpy(&temp, &startPosition,4);
    是不对的,破坏了结构_variant_t的