2008-09-22 1 views
0

VT_DATE에서 불변의 VT_BSTR VARIANT 변환하려고합니다. 다음 코드는 Windows XP에서 작동합니다.PocketPC - VT_DATE 불변의 VT_BSTR로 변환

VARIANT va; 
::VariantInit(&va); 

// set the variant to VT_DATE 
SYSTEMTIME st; 
memset(&st, 0, sizeof(SYSTEMTIME)); 
st.wYear = 2008; 
st.wMonth = 9; 
st.wDay = 22; 
st.wHour = 12; 
st.wMinute = 30; 

DATE date; 
SystemTimeToVariantTime(&st, &date); 

va.vt = VT_DATE; 
va.date = date; 

// change to a string 
err = ::VariantChangeTypeEx(&va, 
       &va, 
       LOCALE_INVARIANT, 
       0, 
       VT_BSTR); 

위의 코드는 PPC 2003 및 Windows Mobile 5에서 E_FAIL을 반환합니다. 누군가 위의 코드를 수정하거나 대안을 제공 할 수 있습니까?

EDIT : 날짜를 문자열로 변환 한 후 문자열을 사용하여 SQL 업데이트를 수행합니다. 업데이트가 장치의 국가 별 설정과 상관없이 작동하기를 바랍니다. 그래서이 정보를 "불변"형식으로 변환하려고합니다.

내가 지금 일을 나타나는 형식으로 날짜를 변환하려면 다음을 사용하고 있습니다 :

err = ::VariantTimeToSystemTime(va.date, &time); 
if (FAILED(err)) 
    goto cleanup; 

err = strDate.PrintF(_T("%04d-%02d-%02d %02d:%02d:%02d.%03d"), 
    time.wYear, 
    time.wMonth, 
    time.wDay, 
    time.wHour, 
    time.wMinute, 
    time.wSecond, 
    time.wMilliseconds); 
+0

나는 알고 있다고 생각했지만 잘못되었습니다. 실제로 소스와 목적지에 대해 동일한 VARIANT를 사용할 수 있습니다. VARIANT가 VT_DATE로 설정되는 방법에 대한 자세한 정보를 추가 할 수 있습니까? –

+0

동일한 E_FAIL 결과를 사용하여 VT_DATE를 설정하는 예를 변경했습니다. –

답변

1

이 정말 답이 아니라 문자열 에 날짜 변경은 아니다 로케일 불변의 태스크 - 이것은 로케일에 크게 의존합니다. 이 경우에는 Variant Time을 System Time으로 변환 한 다음 sprintf 스타일 함수를 사용하여 문자열로 변환합니다.

0

여기에 맞는 것은 아니지만 잘못된 경로를 사용하고있는 것 같습니다. . VarBstrFromDate을 사용하지 않으시겠습니까? 이것은 로케일을 사용하거나 (또는 ​​선택적으로 하나를 무시함) 당신이 원하는 것에 훨씬 가깝습니다.

+0

VarBstrFromDate는 LOCALE_INVARIANT (0x007f) –

1

(나는 ('작업', 당신은) ... 알고 응답 나에게 잠시 걸렸다 미안 해요)

내가의 COM 지점에서 코드와 아무 잘못 표시되지 않습니다 전망.

아마도 문제는 LOCALE_INVARIANT입니다. Windows XP에서 소개되었습니다. Windows CE 제품군에서 지원되지 않을 수 있습니까?

로케일을 LOCALE_USER_DEFAULT으로 변경하고 오류가 계속 발생하는지 확인해보십시오. 대부분의 경우 이것은 어쨌든 가장 적절한 로케일이 될 것입니다. 특히 사용자에게 값을 표시하려는 경우

다른 형식으로 구문 분석 할 값을 전달해야하므로 특정 형식이 정말로 필요한 경우 사용자 요구 사항에 맞는 특정 로캘을 사용해보십시오. 아마 en_US.

어떻게되는지 알려주세요.

+0

을 사용하는 경우 VariantChangeTypeEx와 마찬가지로 실패합니다. 불행히도 사용자의 로캘로 변환하는 것은 정확히 수행 할 작업이 아닙니다. 원래 게시물의 편집을 참조하십시오. 부동 소수점 숫자를 문자열 표현으로 변환하는 데 비슷한 코드를 사용하고 있습니다.이 경우 LOCALE_INVARIANT _does_ work가됩니다. –

관련 문제