Witaj!
several dodał nowy post w wątku: Szczegóły Błąd C2440 "domyślny argument": nie można konwertować z "const wchar_t [1]" na "BSTR" konsola sapi.h 11742
"Błąd" leży w nagłówku sapi, a nie w Twoim kodzie.
Kopiuj
projekt konsola, plik sapi.h >> /* [defaultvalue][in] */ const BSTR PropertyName = L"",
L"" oznacza pusty "wide string literal", na windowsie kodowany jako UTF16 więc podlegającym zewnętrznym standardom. BSTR również służy do przechowywania danych unicode, tak jak wchar_t tyle, że już na rzecz COM, czyli jest to wewnętrzny wynalazek microsoftu. Co ciekawe, na windowsie obydwa podmioty to de facto unsigned short* z perspektywy kompilatora, więc jeśli by tylko zapytać standardowy system typów, takie przypisanie jest poprawne co tlumaczy samo istnienie takiej linijki w kodzie SAPI. Tym nie mniej BSTR spodziewa się innego kodowania niż UTF16 tak więc w runtime dostaniemy trudne do odgadnięcia błędy, stąd pewnie microsoft zaczął zaliczać takie przypisanie jako błąd konwersji typów. I to jest w sumie ciekawa zagadka dla kogoś kto lubi archeologię. Jak stare musiałeś mieć SDK albo samo sapi.h że wciąż miałeś tak starą linijkę jak const BSTR PropertyName = L""; która musiała powstać zanim kompilator zaczął ostrzegać przed przypisaniem wchar_t* do BSTR? Kiedy taka konwersja zaczęła być zaliczana jako błąd C2440?
Z poważaniem, 4programmers.net
|