You should use wcstod_l instead and pass the locale you need as the 3rd argument, so the ',' is understood and parsed properly. Something like this:
_locale_t fr = _create_locale(LC_ALL, "fr-FR"); // french locale
CComBSTR data = SysAllocString(L"239,78");
cout<<wcstod_l(data, NULL, fr)<<endl;