Как использовать существующий код C # из программы C - PullRequest
4 голосов
/ 30 ноября 2010

Есть ли способ, которым я могу разработать пример программы на C #, сделать ее DLL и использовать ее в моей программе на C?

Скажем, в C # DLL есть функция add(int a, int b), которая возвращает или печатает результат. Я хочу использовать это в моей C-программе. Любая ссылка на пример должна быть хорошей помощью.

Ответы [ 2 ]

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

Самый простой способ сделать это - представить C # DLL в качестве COM-объекта, а затем создать его экземпляр из приложения C / C ++. См. MSDN пошаговое руководство.

В качестве альтернативы, если вы действительно хотите вызвать C ++ DLL из приложения C ++, вы можете создать смешанный режим C ++ / CLI.приложение, которое содержит как управляемый, так и неуправляемый код.Приложение C ++ может затем вызывать функции непосредственно из управляемой DLL C #.

Также см. «Обзор совместимости управляемого / неуправляемого кода» в MSDN.


РЕДАКТИРОВАТЬ: Без какой-либо дополнительной информации, чем "это не работает в C", я даже не знаю, какие из приведенных выше предложений вы пытались.Как я и предположил, я не уверен, что второй будет работать с прямым C (никогда не пробовал), но я не вижу причин, почему первый не будет.

В любом случае, быстрое и грязное исправление может бытьобернуть функции C # в C ++ DLL, которую вы затем вызываете из своего C-приложения.Убедитесь, что вы объявили любую функцию, которую хотите экспортировать из DLL C ++, как extern, в противном случае их имена будут искаженными именами C ++, с которыми невозможно работать в C. Для получения дополнительной информации см. Здесь: http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html

0 голосов
/ 23 июля 2011

Вот решение. Решение предоставляет атрибут [DllExport], который позволяет вызывать функцию C # из C.

https://sites.google.com/site/robertgiesecke/Home/uploads/unmanagedexports

C # код

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;
 }
...