C++ i C# - łączenie kodu (komunikacja między nim)

0

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 :)

0

Nie chcialbym cie martwic ale to moze byc trudne. Jak dla mnie to jest pare mozliwosci

  1. 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.

  2. wrzucenie do programu jako kod nie ruszany przez gc (bodajze nazywa sie to kodem niezarzadalnym ale glowy sobie nie dam uciac)

  3. 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 :)

0

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 :)

0

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

0

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).

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