Autor Wątek: Kompilacja DLL w trakcie wykonywania się programu korzystającego z tejże DLL-ki  (Przeczytany 529 razy)

Offline Benqowny

  • Użytkownik

# Lipiec 25, 2018, 20:53:05
Witam,

chciałbym się poradzić bardziej doświadczonych forumowiczów jak to zrobić, żeby program (być może zalążek jakiegoś silnika) potrafił w trakcie wykonywania się
po naciśnięciu jakiegoś przycisku  (tak jak w unity "play" )
skompilować zewnętrzny (tj. nie będący częścią tego programu) kod źródłowy
i naturalnie uruchomić ten kod.

Trochę czytałem tam gdzie mi Google zasugerował i znalazłem gotowe rozwiązania :
http://runtimecompiledcplusplus.blogspot.com/
http://www.codinglabs.net/tutorial_CppRuntimeCodeReload.aspx

Na jakichś innych forach znalazłem też wskazówki dotyczące problemu. Sugerowały one , aby skorzystać z DLL w celu osiągnięcia takiego rezultatu.

Mój problem polega na tym , że nie potrafię ogarnąć tych gotowców na tyle ,żeby samemu zrobić coś podobnego.

Próbowałem zrobić użytek z tej DLL-ki , ale utknąłem w miejscu , w którym w projekcie programu-silnika trzeba w "propertisach" projektu ustawić ścieżkę
dla pliku  nagłówkowego .H DLL-ki ,oraz pliku .LIB  tejże DLL-ki. A to dlatego, że kiedy uruchomię program-silnik i podczas jego działania zmienię coś w kodzie DLL-ki i próbuję ją skompilować, to wyskakuje błąd ( domyślam się że to dlatego ,że pliki .LIB i .H są  dołączone do projektu programu-silnika).

Korzystałem z tego tutoriala http://programmingexamples.wikidot.com/blog:1
w celu stworzenia DLL-ki i wyeksportowania z niej klasy.

Nie wiem czy nie piszę tego trochę zbyt chaotycznie, dlatego jeśli ktoś zdecydowałby się mi pomóc , to oczywiście postaram się odpowiedzieć, co chciałbym osiągnąć innymi słowami jeśli zaistnieje taka potrzeba. (tutaj link do gotowego przykładu co chciałbym zrobić :
https://www.youtube.com/watch?v=mFSv0tf6Vwc&feature=youtu.be

Proszę - jeśli ktoś może mi wytłumaczyć jak skorzystać z któregoś z tych dwóch gotowców lub jak użyć tej DLL-ki.

Zaznaczam ,że korzystam z języka C++.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline ChristopherTa...

  • Użytkownik

# Lipiec 26, 2018, 12:52:17
Szanowny Panie to zagadnienie zaawansowane - żeby nie powiedzieć eksperckie!
Po pierwsze chciałbym się dowiedzieć czy to ma być kompilowany c++, czy mechanika działania Unity? (tak tylko... żeby zmiejszyć ścianę tekstu potrzebnego do wyjaśnienia - na przykład.)
Pozdrawiam. Krzysztof.
« Ostatnia zmiana: Lipiec 26, 2018, 13:30:42 wysłana przez ChristopherTaivaus »

Offline Avaj

  • Użytkownik

  • +2
# Lipiec 26, 2018, 14:43:04
Pliku .lib używasz przy statycznym linkowaniu. Do takiego zachowania jak ty chcesz to raczej chcesz dynamiczne ładowanie. Na Windowsie LoadLibrary, na Linuxach dlopen() i wyciągasz sobie z DLLki pointery na funkcje. Wtedy możesz te funkcje zawołać, wszystko w czasie działania programu.

Offline .:NOXY:.

  • Użytkownik
    • Profil

# Lipiec 26, 2018, 19:36:22
Zasada jest prosta nieco trudniej z wykonaniem ale tak jak pisze Avaj

1) Twoja appka uzywa DLLki
2) Appka ma podpina sobie watcher na plik DLL
3) Odpala kompilacje zew kodu
4) Dostaje info z watchera ze DLLka została podmieniona (skonczyla sie kompilacja)
5) Ponownie laduje DLLKe i pobiera adresy funkcji
6) Profit