Cześć,
Mam program napisany w Delphi 7 i piszę bibliotekę (dll) w Sydney. Problem polega na tym że parametry jakbym nie przekazywał string, PChar nie przechodzą poprawnie
wywala krzaki.
Może ktoś coś wie dlaczego ?
Pozdrawiam
PChar z tego co widzę to zwykły odpowiedni C char*, czyli bajty tekstu + nullbajt.
Pewne stringi w delphi mają budowę taką, że pierwszy bajt to długość stringa, a potem bajty, które są zawartością tego stringa.
A ten string to może być jakiś obiekt, możesz sobie ten kod podglądnąć w disassemblerze/debugerze i zobaczyć jak interpretuje dany parametr.
Albo po szperać żeby zobaczyć co to za obiekt.
Daj jakiś kawałek kodu który wywołujesz.
Krzaki to mogą być losowe liczby interpretowane jako ciąg tekstowy.
wywolanie z programu
TInitializeFedEx = function(const aUser, aPassword, aDBName : string; const aWinAuth : boolean) : integer; stdcall;
biblioteka
function InitializeFedEx(aUser, aPassword, aDBName : string; aWinAuth : boolean) : integer; stdcall;
funkcja nic robi, show message
Spróbuj prze debuggować i wywnioskować co mogło pójść nie tak, czerwona kropka przy linii kodu sygnalizuje miejsce położenia breakpointu i jak program się tam zatrzyma to sprawdź czy w zmiennych znajduje się to co powinno i potem sobie prze stepuj do wnętrza tej funkcji i oglądaj co się dzieje.
Ja tam nie mam pomysłu co tam mogło się rozwalić.
AFAIR typ String
w nowych Delphi jest tożsamy z multibajtowym UnicodeString
, a w Delphi 7 z jednobajtowym AnsiString
, więc obstawiam taką niezgodność typów. Stąd jeśli chcesz użyć kodu z nowego Delphi w apce napisanej w Delphi 7, to przekonwertuj jawnie do AnsiString
i przekaż jako PAnsiChar
.
PS: W Delphi 7, aby móc przekazywać/odbierać dane w postaci typu String
, należało dodać do uses
moduł ShareMem
. Nie wiem na jakiej zasadzie odbywa się to w nowych Delphi, bo ich nie znam, ale najbezpieczniej będzie pchać pointery. Przy czym jeśli zależy Ci na Unicode, to rób to za pomocą PWideChar
, a jak nie to PAnsiChar
.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.
Szalony ProgramistaSzalony Programista