Witam. Mam projekt rozbity na kilka osob. Czesc funkcji programu napisana jest juz w C, reszte dopisuje ktos w C++ i owija to w ladna klase. Do mnie nalezy czesc interfejsu uzytkownika, ktora chce napisac w C#. Kod w C++ bedzie dzialal w osobnym watku, niz interfejs uzytkownika. Przez interfejs uzytkownika bedziemy wywolywali metody klasy z C++, jak i te metody (w dowolnym czasie) maja wysylac dane do interfejsu. Jak polaczyc te dwa kody i w jaki sposob moglaby sie odbywac komunikacja miedzy nimi? Nie musza byc one razem w jednej kompilacji. Bylbym wdzieczny za jakies pomysly :)
Nie chcialbym cie martwic ale to moze byc trudne. Jak dla mnie to jest pare mozliwosci
-
przepisanie tego na MC++, co w sumie w teori powinno byc proste ale w praktyce nie probowalem. Co prawda probowalem polaczy MC++ z C++ ale mi nie szlo to za dobrze.
-
wrzucenie do programu jako kod nie ruszany przez gc (bodajze nazywa sie to kodem niezarzadalnym ale glowy sobie nie dam uciac)
-
pewnie jakas mozliwosc odpalanie natywnych bibliotek, np. w postaci dll'ki istnieje, ale to tylko moje zalozenie, ktore nie musi byc prawda.
Pozdrawiam.
[edited]
Moiwac MC++ mialme na mylis C++/CLI po prostu jesli chodzi o nazewnictow to zatrzymalem sie na wersji 2003 i myslalem ze MS nie zmienil nic w nazwach :)
A gdyby skompilować to do metadaty i zlinkować w jeden program ? I tak przecież wszystko jest kompilowane do języka pośredniego. Co prawda nie wiem jak to zrobic ale kombinuj w tym kierunku :)
Przepisanie tego na MC++ nie powinno sprawić problemu. Jeśli kod będzie niezarządzany to guzik z użycia biblioteki .NET i jej wszystkich klas. Dll chyba inculuduje się za pomocą deryktywy #using <mscorlib.dll>.
Radzę tylko użyć C++/CLI zamiast MC++, bo ten był tylko wersją przejściową i nie jest używany na szeroką skalę.
Pozdrawiam i życzę powodzenia :)
Najlatwiej bedzie c i c++ zamknac w dll a nastepnie w c# zrobic tak:
using System.Runtime.InteropServices;
[DllImport("myDll.dll")]
extern static void Funkcja(IntPtr wskaznik);
pozdrawiam
johny
Tak, tylko ze ta dll'ka ma tetnic wlasnym zyciem i w roznych momentach kontrolowac GUI. (np przesyla informacje o postepie wykonywania operacji w roznych momentach).
Wpadlem na pomysl by rozwiazac to w taki sposob:
Otoczyc klase z C++ w zwykla aplikacje windowsa (sama message mapa np w MFC ) i to wszystko skompilowac do dll'ki dajac jedna funkcje zewnetrzna w ktorej bym startowal to i jako parametr przesylal uchwyt do aplikacji z ktora ma sie odbywac komunikacja. Interfejs zrobic wtedy osobno w C#, ktory by przyjmowal win message z tamtej klasy i glownie by ta cala komunikacja odbywala sie w taki sposob, juz bez zadnej ingerencji w kod miedzy programem a interfacem.
Po stronie programu i interfejsu zrobic odpowiednie komendy. Np kliknalem na "zrob cos", to wysylany jest msg do dll'ki by wywolal juz sobie odpowiednia funkcje i tak samo by interfejs obslugiwal odpowiednie zdarzenie po dostaniu msg'a z dll'ki.
Wszystko to takie czysto teoretyczne gdybanie. Jak ktos ma lepszy pomysl to niech smialo mowi (albo mnie poprawi jak w moim mysleniu jest blad).