ktoś Napisano Lipiec 7, 2006 Zgłoś Share Napisano Lipiec 7, 2006 W sktórcie można powiedzieć, że debuger odmówił mi współpracy z biblioteką dll.Dokładnie sytutacja wygląda następująco:potrzebowałem kilku funkcji, któych delphi standartowo nie udostępnia ( bo i poco, jeżeli nie są to "typowe", potrzebne szerokiemu gronu programistów), więc napisałem je samemu. Wszystko było ok. Jednak potrzebowałem tych funkcji w różnych miejscach programu, i w różnych unitach. Postanowiłem wpakować je do biblioteki.Zrobiłem ładowanie statyczne, bo najprościej.Wszystko działałopotem stwierdziłem, że jedna z funkcji nie spełnia swojej funkcji...ups... zakeciłem się trochę..funkcja nie robi tego, czego się spodziewałem : zamiast przekształcić mi stringa do postaci pozwalającej się konwerterować do integera (a następnie wywołać strtoint), wywala mi EConvertError.Gdy uruchamiam program, pokazuje mi komunikat, że błąd powstał w bibliotece.Gdy uruchamiam bibliotekę pod kontrolą debugera program nadal wywala mi błąd w bibliotece, podczas gdy debuger milczy.Nie wstrzymuje wykonywania kodu w bibliotece, nawet jak ustawiłem pułapki (Ctrl + F5) na inicjalizacji zmiennych we WSZYSTKICH funkcjach (mimo że wywołanie dotyczyło tlyko jednej z nich) wykonywanie kodu nie zostaje zatrzymane przez debuger.Kilka godzin wcześniej wszystko działało dobrze, więc nie bardzo wiem co mogło się zestrać...nie zmieniałem ani nazw funkcji, ani parametrów. Inicjalizacja zmiennych polega tylko na wyzerowaniu ich.Może macie jakieś pomysły? Ostatecznie moge wpakować wszystko do jakiegoś unita i wywoływać przez interface... ale chciałem spróbować nowego (dla mnie) sposobu.ps: bez obaw, ja nie biorę udziału w konkursie. Chociaż chętnie bym w coś pograł Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Lipiec 7, 2006 Zgłoś Share Napisano Lipiec 7, 2006 spoko mialem z tym kiedys problemcalosc wyglada tak ze:1. musisz miec zrobione generowanie pliku map + informacji debugowych2. dorzuc debug source path na pliki ktore sa wygenerowane do dll'ki, bazowo debugpath pokazuje na sources a te pliki z dll laduja w roznych miejscach, jak to zrobisz to powinno pomoc.cos mi po glowie chodzi ze jeszcze cos bylo trzeba zrobic ale kurde ponad 6 mscy temy mialem ten problem i kurde nie pamietam co jeszcze trzeba zrobic. Tak czy siak problem polega na tym ze debuger nie widzi plikow z danymi potrzebnymi do debugowania, jak mu je [b]wskarzesz to wszystko ruszy. Inna metoda to pogrzebac w load modules i ustawiac breakpointy na adresy ale to strasznie do dupy i nie polecam. Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
ktoś Napisano Lipiec 7, 2006 Autor Zgłoś Share Napisano Lipiec 7, 2006 aha... no to już cośA które dane są potrzebne do debugowania?I gdzie to trzeba wskazać?ps: uruchomiłem jeszcze raz tak, że dll jest pod kontrolą delphi.Wywołałem funkcje, i debuger wywalił komunikat o błędzie. Jednak miejsca wskazać nie potrafi... Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Lipiec 7, 2006 Zgłoś Share Napisano Lipiec 7, 2006 zrob taki myk, zeby dll'ka i wszystkie pliki o takej samej nazwie jak ona byly w katalogu z exekiem albo w pliku ze zrodlami. zerknij na tohttp://www.micro-sys.dk/developer/articles...i-dll-debug.phporaz na tohttp://www.nsonic.de/Delphi/txt_WIS00637.htmcos mi po dynce sie obja remote debug symbols albo cos w ten desen ale sa szanse ze majacze :) Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
HNB Napisano Lipiec 7, 2006 Zgłoś Share Napisano Lipiec 7, 2006 Popełniłeś duuuży błąd . Nie wolno, zabrania się używania zmiennych typu string (problem z licznikiem referencji napisu) w parametrach procedur, parametrach i wyniku funkcji exportowanych z DLLki.Istnieje oczywiście kilka technik obejścia tego problem.a) Użyj wspólnego menagera pamięci dla EXE i DLLW pliku dpr od EXE i DLL jako pierwszy moduł musisz wpisać ShareMem. Następnie załączyć jeden dll "BORLNDMM.DLL". Oczywiście możesz też napisać swój menager pamięci . Zamiast string w parametrach funkcji użyj PCHARw DLL: [code=Delphi] function MyStrToInt(const a: PCHAR): integer; var Code: [BY[B[ [ĘJK[JNB[Ś4(Ń4)4(5MŃQ%ĄA !HĄ [/code]Wydaje mi się że właśnie w tym leży Twój problem - używasz string tam gdzie nie wolno. soon Delphi will be only for veterans and finally we all will die at the end… delphi.dathox.com - nowinki z świata Delphi/Pascala only programmers and drug dealers call their customers "users" Oto cisza przed burzą, Chwile się dłużą.Z gór schodzi dużo chmur ku podnóżom.Ptaki milaczą, drogi suche jak wiór się kurzą, Ptaki milczą a drogi się kurzą. Link do komentarza Udostępnij na innych stronach More sharing options...
ktoś Napisano Lipiec 7, 2006 Autor Zgłoś Share Napisano Lipiec 7, 2006 błąd tak, ale w poście:Przekazuję SHORTstringa Problem nie powinien leżeć tutaj, bo jak wklepałem stringa jako parametr, to kompilator się zbuntował, komentaż przeczytałem i chyba zrozumiałem o co w nicm chodzi (z angielskim sobie radzę, ale jakoś tak nie najlepiej jak [b]narazie), a na shortstringu wszystko działało. (tj. kompilacja i funkcje wykonywały sięOK. Tylko potem zacząłem kombinować, bo mi jedna albo dwie funkcje nie działały. Teraz mi wszystko nei działa)Toster: wrzuciłem program i dll do jednego katalogu, i pułapka zadziałałaZobaczymy co będzie dalej. tymczasem :pom: dla Ciebieedit: już wiem co jest nie tak... funkcja nie przekształca stringa, tylko wykonuje kilka przebiegów pętli i każe konwerterować do integera ciąg znaków o treści:'' (nic)[/url] Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.