Witam, dużo korzystam z tego forum od kilku lat, dziś zamieszczam swój pierwszy post, ponieważ tym razem nie mogę znaleźć nigdzie odpowiedzi na mój problem.
Przed długi czas budując aplikacje (exe i dll) używałem opcji 'dynamic rtl' i 'build with runtime packages', ale ostatnio chciałem je wyłączyć, żeby nie musieć dostarczać bpl'i w instalatorach.
Tutaj zaczął się problem, który napotkałem w swojej sporej aplikacji, ale udaje mi się zreprodukować w bardzo prostym zestawie exe i dll.
Mam aplikację exe.exe która jest po prostu formą z guzikiem, który wywołuje na głównym wątku funkcję z pliku dll.dll. Funkcja w dll'u startuje nowy wątek, który w pewnym momencie próbuje się zsynchronizować z głównym wątkiem. Jeśli mam w obu projekatach (exe i dll) zaznaczone opcje 'dynamic rtl' i 'build with runtime packages' rtl, wszystko działa jak należy. Jeśli w którymkolwiek z projektów którakolwiek opcja jest odznaczona, mój nowy wątek nie może się zsynchronizować z głównym. Dodam, że jeśli funkcję z dll'a przeniosę do exe, to niezależnie czy dynamic rtl jest zaznaczone czy nie, wszystko działa ok.
Czy mógłby mi ktoś wytłumaczyć dlaczego?
Przede wszystkim nie rozumiem jaka jest różnica między opcją 'dynamic rtl' a 'build with runtime packages' za wyjątkiem tego że przy tej drugiej wyszczególniam których bibliotek nie chcę wkompilowywać w mój projekt.
Po drugie do tej pory myślałem, że jedyna różnica polega na tym, że albo biblioteki będą wkompilowane, albo będą musiały być dostarczone osobno, ale że nie ma to wpływu na działanie aplikacji, a w moim przypadku okazuje się, że ma.
Po trzecie chciałbym poznać jakąś regułę które powie mi kiedy muszę, a kiedy nie mogę korzystać z jednej bądź drugiej formy dołączania bibliotek.
Jeśli opis mojego problemu jest nie jasny chętnie służę przykładem grupy projektowej gdzie można zobaczyć co zrobiłem i co nie działa. Z góry dziękuję za pomoc.