Wymiana informacji pomiędzy programem C# i C

0

Szukam rozwiązania prostego problemu.
Mam dwa programy, jeden napisany w C# z użyciem Formsów a drugi w czystym c chodzący pod konsolką.

Teraz chciałbym żeby te programy komunikowały się między sobą. Wygląda to generalnie tak że program w C# odpala sobie programik w c w tle i ten program wykonuje pewne obliczenia przez pewien czas na zasadzie takiej że program w C# odpytuje tego konsolowego a on zwraca odpowiedź.

Do tej pory robiłem to tak że program w C# uruchamiał ten konsolowy i pisał po konsoli (składał zapytania) i czytał wyjście (stdin out). Niby to działa ale ani to wygodne ani ładne a i błędy jakieś czasem się pojawiały.

Jak można to lepiej rozwiązać?

0

w c# dllimport
i wywolujesz metody z c

0

No ale to import z dll przecież. Może sockety albo pamięć współdzielona? Ale to będzie sporo trudniejsze do zaimplementowania w czystym C.

1

No ale to import z dll przecież. Może sockety albo pamięć
współdzielona? Ale to będzie sporo trudniejsze do zaimplementowania w czystym C.

Nie próbowałem więc to tylko teoria, ale przecież exe w budowie jest praktycznie taki sam jak DLL - wystarczy żeby program w c ustawił eksporty i powinno śmigać.

0

To po co wtedy program a nie dll? Zreszta, jak program ma przekazac wyniki swojego dzialania niby?

0

w C# ( i pewnie w c z użyciem jakiś biblioteki) można monitorować dany plik ( w tym przypadku Twój plik, plik wymiany informacji ), dzięki temu nie potrzebowalibyśmy timerów, które co jakiś czas sprawdzałyby zmiany w pliku. Jako że 2 aplikacje "nasłuchują" zmian proces wyglądałby następująco.
C# zmienia plik -> c wyłapuje go, wykonuje działania, C zmienia plik -> C# wyłapuje zmiany i robi coś z nim (wyświetla,edytuje itd) i tak w kółko ;)

0

To jest tak prymitywne rozwiazanie, ze juz lepiej pozostac przy stdin/stdout

1

To może tamten program w C skompilować jako bibliotekę i wszyscy będą zadowoleni?

0

IPC - potoki nazwane (takim potokiem jest konsolowy stdin, stdout i stderr), mailsloty (tych akurat nie polecam, ale też można), sockety, pamięć dzielona, semafory, muteksy, komunikaty... odkrywacie koło na nowo.

0

Jakiś czas temu wykorzystałem named pipes do komunikacji programu napisanego z C# z programem napisanym C++. Trochę więcej tutaj. Generalnie polecam takie podejście.

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