Czy jest jakiś inny sposób zamiany statycznego stringa na PChar/PWide char poza rzutowaniem i tandemem StrAlloc-StrPCopy ?
Ew. Czy jest jakis sposób, żeby metodzie Loadlibrary podać dynamicznie nazwę ładowanej biblioteki ?
Czy jest jakiś inny sposób zamiany statycznego stringa na PChar/PWide char poza rzutowaniem i tandemem StrAlloc-StrPCopy ?
Ew. Czy jest jakis sposób, żeby metodzie Loadlibrary podać dynamicznie nazwę ładowanej biblioteki ?
Musi być konwersja ale nie rozumiem co złego jest w rzutowaniu?
Nic.
Temat można zamknąć. Problem był zupełnie gdzie indziej.
Trochę późno na odpowiedź na pierwszy post, ale dla potomnych może się przydać.
toyman napisał(a):
Czy jest jakiś inny sposób zamiany statycznego stringa na PChar/PWide char poza rzutowaniem i tandemem StrAlloc-StrPCopy ?
Pewnie jest ich dużo, ale to nieistotne w jaki sposób to zrobisz, ważne aby otrzymać prawidłowy PChar
. No i w tym przypadku akurat najłatwiejszym i najczęściej wykorzystywanym sposobem jest właśnie rzutowanie.
Ew. Czy jest jakis sposób, żeby metodzie Loadlibrary podać dynamicznie nazwę ładowanej biblioteki ?
Funkcja ta przyjmuje ciąg znaków, więc z natury może przyjmować dowolną nazwę biblioteki czy też pełną ścieżkę do niej. Może być również determinowana w trakcie działania programu (pobierana od użytkownika lub wczytywana z pliku konfiguracyjnego).
Problemem nie było samo rzutowanie/konwersja - bo tak jak napisałem - nic w tym złego. Po prostu waliło mi błędem, a że konfiguracja alikacji zewnętrznej i ładowanych dll'ek z jaką w tej chwili walczę nie pozwala mi na skuteczne debuggowanie - nie byłem w stanie przygwoździć problemu, a że waliło mi na wszystkich znanych mi metodach konwersji string->PChar - myślałem, że coś robię w tym zakresie źle.
Okazało się, że aplikacja po załadowaniu i zainicjalizowaniu mojej biblioteki - zwalniała ją i ładowała ponownie w momencie, gdy użytkownik chciał skorzystać z funkcji zawartych w dll'ce - w efekcie traciłem zawartość zmiennych globalnych, z których korzystałem w funkcjach - w efekcie string, który chciałem przekonwertować był po prostu pusty, niezainicjalizowany.
Po przygwożdżeniu problemu - zwykłe rzutowanie PChar(string), tak samo jak StrAlloc i StrPCopy - działają. No i oczywiście - SafeLoadlibrary i LoadLibrary bez problemu przyjmują wartość zmiennej łańcuchowej - po prostu nie w tym był problem.