4programmers.net

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?


Zobacz post

Z poważaniem,
4programmers.net

Jeżeli masz problemy z kliknięciem na przycisk "Zobacz post", skopiuj i wklej poniższy link w przeglądarce:

http://4programmers.net/Notification?path=%252FForum%252FC_i_C%252B%252B%252F378074-szczegoly_blad_c2440_domyslny_argument_nie_mozna_konwertowac_z_const_wchar_t_1_na_bstr_konsola_sapih_11742%253Fp%253D2020812%2523id2020812