Konwersja String -> PChar/PWideChar w D-XE2

0

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 ?

3

Musi być konwersja ale nie rozumiem co złego jest w rzutowaniu?

0

Nic.

0

Temat można zamknąć. Problem był zupełnie gdzie indziej.

2

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).

0

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1