Strona 1 z 1

Dwie zmienne

Nowy postNapisane: czwartek, 5 lipca 2018, 10:21
przez Mironas
Jaka jest różnica pomiędzy zmiennymi wch1 a wch2?
KOD cpp:     UKRYJ  
    // wch1
    String plikepp = "E:\\Download\\Zamowienie002.epp";
    PWCHAR wch1 = plikepp.w_str();

    // wch2
    PWCHAR wch2 = L"E:\\Download\\Zamowienie002.epp";
 


Teoretycznie są takie same. W debugerze wyglądają tak samo, oba są zakończone '\0'.
Pytam, bo męczę się ze Sferą dla Subiekta, i jak podaję ścieżkę do pliku dla metody WczytajPlik to w przypadku wch2 wywala błąd "Access violation".

Inna sprawa, że jak podam wch1 to WczytajPlik zwraca false (chociaż ścieżka jest poprawna), ale przynajmniej się nie wysypuje.

Re: Dwie zmienne

Nowy postNapisane: czwartek, 5 lipca 2018, 10:59
przez polymorphism
Różnica jest taka, że do wch1 przypisujesz adres na pamięć, która zostanie zwolniona po wyjściu z bloku (niszczenie plikepp) lub zmianie zawartości plikepp. Do wch2 przypisujesz adres do literału tekstowego, który jest stały i dostępny przez cały czas (kompilator powinien krzyknąć, że przypisujesz wskaźnik const do non-consta).

Z metodami *_str trzeba uważać, bo mogą zwracać bufory, które powodują, że łańcuch znakowy jest dostępny tylko w ramach jednego wyrażenia.

Re: Dwie zmienne

Nowy postNapisane: czwartek, 5 lipca 2018, 11:40
przez Mironas
Czyli metoda WczytajPlik (z Subiekt Sfera) wysypuje się kiedy dostaje parametr ze stałym literałem.
Być może ta funkcja próbuje modyfikować tę zmienną (const) i to jest przyczyną błędu.

Co nadal nie wyjaśnia dlaczego WczytajPlik z parametrem wch1 mimo, że wykonuje się bez błędu to zwraca False, czyli błąd. Ale to już problem nie na to forum.
Ale tak przy okazji:
Próbuje ten sam kod wykonać w Basic-u w OpenOffice Calc. Ktoś wie, jak w OO dodać referencję do biblioteki DLL? W MS Excel jest to "Tools >> References" ale w OO nie widzę podobnej opcji. :/

Re: Dwie zmienne

Nowy postNapisane: czwartek, 5 lipca 2018, 12:17
przez polymorphism
Czyli metoda WczytajPlik (z Subiekt Sfera) wysypuje się kiedy dostaje parametr ze stałym literałem.

Jakie parametry przyjmuje ta funkcja?

Re: Dwie zmienne

Nowy postNapisane: czwartek, 5 lipca 2018, 14:50
przez Mironas
polymorphism napisał(a):
Czyli metoda WczytajPlik (z Subiekt Sfera) wysypuje się kiedy dostaje parametr ze stałym literałem.

Jakie parametry przyjmuje ta funkcja?

Tylko ścieżkę do pliku (wchar_t*) i zmienną (typ wyliczeniowy) określającą, jakiego typu dokument jest wczytywany. Nie można tam niczego poknocić.