pobieranie rekordu z dlla Delphi

0

Mam mały problemik. Jest dll napisany w Delphi w którym jest formularz a na nim jest kila CHeckBoxów i RadioButtonów, jakieś EditBoxy itp. Stany przycisków i wartości Editów zapisywane są w rekordzie intów (w drugiej wersji w tablicy int). Pod delphi wszystko działa ok Wartości z dll przekazywane są do aplikacji itd. Problem pojawia się przy wywoływaniu funkcji w VC++. Wywołanie funkcji wyświetla forme z dlla lecz przy zamykaniu aplikacji VC++ się wykłada. Może ktoś wie jak rozwiązać taki problem. Przypuszczam iż błąd tkwi w zapisywaniu w pamieci Inta C++ i Inta Delphi.

0

problemem mogą być tylko deklaracje funkcji do tego dll - jeśli delphi nie 'zna' cdecl a Ty masz zdeklarowane funkcje jako cdecl to po każdym odwołaniu do funkcji z dll'a - wskażnik stosu rośnie o sozeof(wszystkie parametry)

O rozmiar parametrów się nie martw bo to jest zawsze DWORD

np. używasz printf("forum\n") - Twój program wysyła na stos adres stringu i skacze do dll'a, ale zaraz za rozkazem skoku kompilator wstawia rozkaz czyszczenia stosu: ADD ESP,4 (4 bo jeden parametr wysłałeś do funkcji) - to jest cdecl
ale używając zwykłego stdcall - funkcje same po sobie czyszczą stos (tu: RET 4), a kompilator nie dodaje tego ADD ESP,x

Może być że odwołujesz się do funkcji poprzez jej adres, a ta funkcja jest przystosowana do odwołań cdecl... i nie czyścisz stosu...

sprawdź ;)

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