Как создать промежуточную библиотеку? - PullRequest
2 голосов
/ 30 ноября 2010

Я ищу информацию о том, как чего-то добиться с помощью библиотек на C ++ и c #. Я хотел бы знать, как решить следующую проблему:

  • Приложение C #: - есть окно
  • Библиотека C ++: - имеет функцию create_button (x, y), когда
    вызывается, это создаст кнопку на
    окно приложения c #. (если Приложение C # не запущено,
    ничего не случится)
  • Приложение C ++: динамически связывается с библиотекой C ++ и вызывает метод create_button () функция.

Как бы я подошел к этой проблеме, я был бы рад услышать некоторые ваши идеи. Платформа оконная. Мой вопрос: как бы я позволил библиотеке C ++ связываться с приложением c # для создания новой кнопки? Это связано, сокеты, ... Я особенно думаю о GTK + в linux, вы ссылаетесь на библиотеку gtk +, но как библиотека взаимодействует с GNOME для создания нового окна и т. Д., Что-то в этом роде. Меня не интересует написание dll и связывание их с приложением на c #, я заинтересован в создании промежуточной библиотеки.

Ответы [ 4 ]

2 голосов
/ 30 ноября 2010

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

0 голосов
/ 01 декабря 2010

Учитывая, что вы управляете кодом приложения C # и управляете кодом приложения C ++ и, предположительно, «промежуточной библиотекой». Я спрашиваю себя: «Почему ты так делаешь?»

Если вы хотите, чтобы приложение C ++ могло вызывать добавление определенной кнопки в приложение C # и чтобы нажатие этой кнопки могло обмениваться данными с приложением C ++, то лично я бы использовал стандартный IPC. и иметь канал связи между приложением C ++ и приложением C # и просто заставить приложение C ++ запрашивать у приложения C # через IPC отображение кнопки, а затем приложение C # отправлять любую информацию (скорее всего тот факт, что кнопка была нажата) ) в приложение C ++ через тот же канал IPC.

Если этот маршрут не сработает, то я думаю, что вам нужно прояснить проблему, которую вы пытаетесь решить, так как в настоящее время я думаю, что ваше текущее «решение» находится на неправильном пути, и поэтому ответ говорит вам, как добиться вашего текущего «решение» будет ошибочным.

0 голосов
/ 30 ноября 2010

Если вы можете создать небольшой, но правильный HWND в C # (не знаю виджет), вы можете использовать его и создать окно c ++, используя окно C # в качестве родителя.

Мы сделали именно это несколько лет назад для пары процессов java / c ++. Тем не менее, приложение Java может передавать значение HWND в приложение c ++ через RPC, поэтому его не сложно настроить.

0 голосов
/ 30 ноября 2010

Здесь вы столкнетесь с проблемами, поскольку C # управляется, а C ++ является нативным.Насколько я знаю, единственный способ вызова нативного кода из управляемого в CLI - это использование уровня P / Invoke, в этом случае вам нужно будет импортировать DLL, написать прототип и т. Д.

Кроме того, я считаю, что вызовы P / Invoke относятся к функциям C, а не к C ++, хотя вы можете обойти это, добавив библиотеку C для вызова, в которую в свою очередь вызывает вашу библиотеку C ++.

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