C API для C # GUI - PullRequest
       8

C API для C # GUI

1 голос
/ 14 февраля 2012

У меня есть поток байтов, которые я сортирую по структурам. Теперь мне нужно обновить графический интерфейс C #, используя значения из этих структур. Теперь я нашел кое-что о pinvoke и dllimport с помощью Google, но все вызывает код c из c #, мне нужно сделать наоборот.

В коде c # есть функции, которые вращают наборы / обновляют значения, поэтому, как только у меня появятся нужные мне значения, я хочу просто вызвать эти функции, с этими значениями в качестве параметров, мой код на c все написан, а графический интерфейс и все кодированы и используя циферблаты, которые я перетаскиваю мышью, мне просто нужно склеить их вместе.

Спасибо за любую помощь!

Ответы [ 2 ]

2 голосов
/ 14 февраля 2012

Вообще говоря, вы не можете вызвать код C # из кода C.(Вы можете вызвать back в код C # из кода C, но сторона C # должна инициировать процесс и передать обратный вызов.)

«Правильный путь» - для кода C #вызвать код C и предоставить функцию обратного вызова (посмотрите, как UnmanagedFunctionPointer узнать, как превратить управляемый делегат в указатель на функцию.)

Если эта опция невозможна,у вас есть несколько альтернатив, но ни одна из них не будет такой простой, как просто «склеить вещи»:

  • Используйте библиотеку C ++ в смешанном режиме, чтобы соединить код C и C #.Это беспорядок, IMO, и я только предлагаю это, потому что это наименьшее количество изменений в вашем коде C.
  • Представьте объект COM из вашего кода C # и обменивайтесь данными с этим из C. Немного менее грязно, чем опцияНо за счет введения COM в смесь.
  • Используйте некоторую форму межпроцессного взаимодействия (сокеты TCP, именованные каналы и т. Д.) И обменивайтесь данными между двумя элементами кода, как если бы они были отдельными программами.
0 голосов
/ 14 февраля 2012

Как насчет того, чтобы вызвать C-код из C # с помощью PInvoke, заставить C-код возвращать некоторые данные, а затем приложение C # использует эти данные для обновления GUI? Есть ли какая-то причина, по которой вы не можете заставить код C # просто «отвечать», вызывая код C только тогда, когда это необходимо, а в противном случае просто захватывая поток пользовательского интерфейса? Почему вы хотите, чтобы ваш код C мог обновлять графический интерфейс?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...