Вызов C # (.NET) API из C

2

Чтобы вызвать C API из С#, я бы использовал P/Invoke. Но если я должен сделать обратное, вызовите .NET API от C, как бы я это сделал?

Теги:

4 ответа

2
Лучший ответ

Если вы действительно хотите сделать все это через API-интерфейсы C и выполните окончание работы с COM и С++, вы можете сделать следующее. Но сначала выясните, действительно ли это необходимо! Я подозреваю, что в большинстве случаев этого не будет.

Шаг 1. Создайте сборку С#.Net, которую вы хотите вызвать.

Шаг 2. Создайте сборку CLI/С++ смешанного режима с экспортированными функциями extern "C". Попросите эту сборку вызвать сборку C $.

Шаг 3. Создайте приложение C, которое вызывает экспортированные функции стиля C из библиотеки DLL, сделанные на шаге 2.

Что нужно учитывать. A. Есть ли реальная потребность в том, чтобы приложение C (против С++/COM) напрямую вызывало сборку .Net?
Другими словами, почему бы не использовать С++ и COM для COM экспортированных методов .Net, если у вас действительно должно быть смешанное (.Net и не .Net) приложение/система?

В. Будут ли написанные API быть обертки на классах? Если да, то как вы будете управлять своим временем жизни? (например, будете ли вы создавать/использовать дескрипторы? Как вы будете управлять своими отношениями с фактическими объектами gc... и т.д.)

С. Строки. Они очень различаются между C и .Net. Убедитесь, что вы знакомы с их различиями и как правильно отправлять строки через эти границы... Подсказка: CString - ваш друг.

1

Существует решение, которое может избежать использования COM или С++\CLI. См. Здесь: Вызов управляемого .NET-метода из собственного кода

0

Вот решение. Он реализует атрибут [DllExport] https://sites.google.com/site/robertgiesecke/Home/uploads/unmanagedexports

Итак, можно сделать что-то подобное, чтобы вызвать управляемый код из неуправляемого кода:

Код С#

class Test
{
     [DllExport("add", CallingConvention = CallingConvention.StdCall)]
     public static int Add(int left, int right)
     {
         return left + right;
     } 
}

C-код

 int main()
 {
      int z = add(5,10);
      printf("The solution is found!!! Z is %i",z);
      return 0;
 }
0

вы можете превратить код С# в COM или использовать С++\CLI.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню