Dwie zmienne

dział ogólny

Dwie zmienne

Nowy postprzez Mironas » czwartek, 5 lipca 2018, 10:21

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.
Avatar użytkownika
Mironas
Programista I
Programista I
 
Posty: 427
Dołączył(a): poniedziałek, 2 stycznia 2012, 19:02
Podziękował : 17
Otrzymał podziękowań: 61
System operacyjny: Windows 10
Kompilator: C++Builder 10.3 Rio
TMS Components Pack
Gadu Gadu: 0
    WindowsChrome

Re: Dwie zmienne

Nowy postprzez polymorphism » czwartek, 5 lipca 2018, 10:59

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.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox

Re: Dwie zmienne

Nowy postprzez Mironas » czwartek, 5 lipca 2018, 11:40

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. :/
Avatar użytkownika
Mironas
Programista I
Programista I
 
Posty: 427
Dołączył(a): poniedziałek, 2 stycznia 2012, 19:02
Podziękował : 17
Otrzymał podziękowań: 61
System operacyjny: Windows 10
Kompilator: C++Builder 10.3 Rio
TMS Components Pack
Gadu Gadu: 0
    WindowsChrome

Re: Dwie zmienne

Nowy postprzez polymorphism » czwartek, 5 lipca 2018, 12:17

Czyli metoda WczytajPlik (z Subiekt Sfera) wysypuje się kiedy dostaje parametr ze stałym literałem.

Jakie parametry przyjmuje ta funkcja?
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox

Re: Dwie zmienne

Nowy postprzez Mironas » czwartek, 5 lipca 2018, 14:50

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ć.
Avatar użytkownika
Mironas
Programista I
Programista I
 
Posty: 427
Dołączył(a): poniedziałek, 2 stycznia 2012, 19:02
Podziękował : 17
Otrzymał podziękowań: 61
System operacyjny: Windows 10
Kompilator: C++Builder 10.3 Rio
TMS Components Pack
Gadu Gadu: 0
    WindowsChrome


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Google [Bot] i 19 gości

cron