Вот решение.Решение позволяет вызывать функцию C # из C, декорируя вашу функцию атрибутом [DllExport] (в противоположность P / Invoke DllImport).
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 code
int main()
{
int z = add(5,10);
printf("The solution is found!!! Z is %i",z);
return 0;
}
Как @ iceflow19 прокомментировал ниже:
Автор ссылки предоставляет препроцессор CLR IL в качестве дополнительного шага во время компиляции.Поскольку сборки используют одинаковый двоичный формат контейнеров (DLL) в Windows, если вы вручную добавляете смещения функций .Net в IL в vtable (список экспорта dll), Windows достаточно умен, чтобы вызывать CLR для запуска этого кода при вызовеот C. Однако есть накладные расходы.Это необъявленная особенность.Вот как работают смешанные управляемые библиотеки в C ++ / CLI.Чтобы использовать его, просто добавьте его через Nuget.Дополнительная цель, добавленная в ваш файл проекта MSBuild, обеспечит шаг предварительной обработки IL