- sect = heap_strdupAtoW(lpszSection);
- entry = heap_strdupAtoW(lpszEntry);
- string = heap_strdupAtoW(lpszDefault);
- file = heap_strdupAtoW(lpszFilename);
- retval = heap_alloc(cbRetBuffer*sizeof(WCHAR));
- ret = SQLGetPrivateProfileStringW(sect, entry, string, retval, cbRetBuffer, file);
- if(ret)
- {
WideCharToMultiByte(CP_ACP, 0, retval, -1, RetBuffer, ret+1, NULL, NULL);
- }
- heap_free(sect);
- heap_free(entry);
- heap_free(string);
- heap_free(file);
- heap_free(retval);
I think it's still the same issue as last time - you're using WCHAR vs CHAR buffer lengths wrong, it might work for this function as long as it's always called with simple strings. But in general WideCharToMultiByte should not be used like that: 'cbRetBuffer' you got here is A-buffer length, yet you allocate W-buffer of this length. Later when you convert W->A you use return value from W-call as A-buffer length.