Bilbioteki dll w Delphi

Bilbioteki dll w Delphi
PI
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad rok
  • Postów:72
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

Szalony Programista
Szalony Programista
  • Rejestracja:około 7 lat
  • Ostatnio:prawie 4 lata
  • Postów:227
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.

PI
to nie obiekt tylko parametr w procedurze
Szalony Programista
Szalony Programista
Powinno się przekazywać takie parametry jakie funkcja oczekuje, pewne rzutowania można zrobić jeśli wiemy jak dokładnie wygląda dana struktura w pamięci.
PI
no i takie przekazuję wszystko 1:1
Szalony Programista
Szalony Programista
Jak bardzo zależy to spróbuj jakiś convert między typami.
PI
nie za bardzo mam co konwertować chyba że string w D7 na AnsiString
Szalony Programista
Szalony Programista
  • Rejestracja:około 7 lat
  • Ostatnio:prawie 4 lata
  • Postów:227
0

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

PI
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad rok
  • Postów:72
0

wywolanie z programu

Kopiuj
TInitializeFedEx = function(const aUser, aPassword, aDBName : string; const aWinAuth : boolean) : integer; stdcall;

biblioteka

Kopiuj
function InitializeFedEx(aUser, aPassword, aDBName : string; aWinAuth : boolean) : integer; stdcall;

funkcja nic robi, show message

edytowany 1x, ostatnio: flowCRANE
flowCRANE
Na temat odpowiadaj w postach, nie w komentarzach.
Szalony Programista
Szalony Programista
  • Rejestracja:około 7 lat
  • Ostatnio:prawie 4 lata
  • Postów:227
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ć.

PI
że co? że mam break point postawić ? pomerdało cię ? jak masz takie mądre pomysły to zabierz się za stepowanie
flowCRANE
@piars: a jak inaczej chcesz sprawdzić co konkretnie biblioteka otrzymuje? Debugger Twoim przyjacielem. Poza tym to Ty prosisz o pomoc, więc bądź łaskaw zachowywać się grzeczniej w stosunku do tych, którzy próbują pomóc.
Szalony Programista
Szalony Programista
Jeśli chcesz się nauczyć rozwiązywać problemy na własną rękę, to nie ma nic lepszego niż zobaczenie co robi procesor, wtedy możesz zrozumieć czemu coś nie działało.
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:4 minuty
  • Lokalizacja:Tuchów
  • Postów:12175
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.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 5x, ostatnio: flowCRANE
PI
no i poszlo bez stepowania
Szalony Programista
Szalony Programista
Ładny z ciebie programista, który sobie nie radzi z konwersją typów kekw
PI
ja nie jestem ani ładny ani programista
Szalony Programista
Szalony Programista
Widocznie nie sprawdziłeś definicji tego wyrazu w słowniku.

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.