Bilbioteki dll w Delphi

0

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

1

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.

0

Daj jakiś kawałek kodu który wywołujesz.
Krzaki to mogą być losowe liczby interpretowane jako ciąg tekstowy.

0

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

0

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

3

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.

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