Вызов C # кода из C ++ - PullRequest
       48

Вызов C # кода из C ++

37 голосов
/ 22 апреля 2009

Мне нужно иметь возможность вызывать произвольные функции C # из C ++. http://www.infoq.com/articles/in-process-java-net-integration предлагает использовать ICLRRuntimeHost :: ExecuteInDefaultAppDomain (), но это позволяет только вызывать методы, имеющие этот формат: int method(string arg)

Каков наилучший способ вызова произвольных функций C #?

Ответы [ 6 ]

46 голосов
/ 20 апреля 2014

Существует несколько способов вызова приложением C ++ функций из DLL C #.

  1. Использование C ++ / CLI в качестве промежуточной DLL
  2. Обратный P / Invoke
  3. Использование COM
  4. Использование хостинга CLR (ICLRRuntimeHost::ExecuteInDefaultAppDomain())
  5. Межпроцессное взаимодействие (МПК)
  6. Редактировать: хост HTTP-сервера и вызов через HTTP-глаголы (например, API стиля REST) ​​
25 голосов
/ 22 апреля 2009

Скомпилируйте ваш код C ++ с флагом / clr . При этом вы можете относительно легко вызывать любой код .NET.

Например:

#include <tchar.h>
#include <stdio.h>

int _tmain(int argc, _TCHAR* argv[])
{
    System::DateTime now = System::DateTime::Now;
    printf("%d:%d:%d\n", now.Hour, now.Minute, now.Second);

    return 0;
}

Это считается "C ++"? Ну, это явно не Стандарт C ++ ...

6 голосов
/ 22 апреля 2009

Если вам все равно, если ваша программа на C ++ (или ее часть) скомпилирована с / clr, вы можете использовать C ++ / CLI для простого вызова любого кода .NET (при условии, что вы добавите ссылку на него). ). Попробуйте эту статью .

РЕДАКТИРОВАТЬ: Вот хороший учебник

Другой путь - сделать ваш код C # открытым как COM.

3 голосов
/ 22 апреля 2009

Самый простой способ - использовать COM-взаимодействие.

1 голос
/ 23 апреля 2009

В качестве альтернативного подхода можно использовать Lua для создания экземпляров объектов CLR, выполнения и возврата результатов.

1 голос
/ 22 апреля 2009

Вы можете использовать вызываемую оболочку COM вокруг вашего кода C #, скомпилированного в DLL.

...