static int GetContactSettingStr(WPARAM wParam,LPARAM lParam) { DBCONTACTGETSETTING* dgs = (DBCONTACTGETSETTING*)lParam; int iSaveType = dgs->pValue->type; if ( GetContactSettingWorker(( HANDLE )wParam, dgs, 0 )) return 1; if ( iSaveType == 0 || iSaveType == dgs->pValue->type ) return 0; if ( dgs->pValue->type != DBVT_ASCIIZ && dgs->pValue->type != DBVT_UTF8 ) return 0; if ( iSaveType == DBVT_WCHAR ) { if ( dgs->pValue->type != DBVT_UTF8 ) { int len = MultiByteToWideChar( CP_ACP, 0, dgs->pValue->pszVal, -1, NULL, 0 ); wchar_t* wszResult = ( wchar_t* )mir_alloc(( len+1 )*sizeof( wchar_t )); if ( wszResult == NULL ) return 1; MultiByteToWideChar( CP_ACP, 0, dgs->pValue->pszVal, -1, wszResult, len ); wszResult[ len ] = 0; mir_free( dgs->pValue->pszVal ); dgs->pValue->pwszVal = wszResult; } else { char* savePtr = dgs->pValue->pszVal; Utf8Decode( dgs->pValue->pszVal, &dgs->pValue->pwszVal ); mir_free( savePtr ); } } else if ( iSaveType == DBVT_UTF8 ) { char* tmpBuf = Utf8Encode( dgs->pValue->pszVal ); if ( tmpBuf == NULL ) return 1; mir_free( dgs->pValue->pszVal ); dgs->pValue->pszVal = tmpBuf; } else if ( iSaveType == DBVT_ASCIIZ ) Utf8Decode( dgs->pValue->pszVal, NULL ); dgs->pValue->type = iSaveType; return 0; }