2010-11-30 2 views
4

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

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

+0

Я сделал это работать на C++, DONOT понять, как использовать в C, Не удалось найти способ заставить его работать. Использование его в C является ключевым для меня медальем – 2010-11-30 13:17:34

+0

Пример кода от ВАС того, что вы уже пробовали, должно быть хорошей помощью. – 2010-11-30 15:23:54

ответ

6

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

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

Также см. "An Overview of Managed/Unmanaged Code Interoperability" на MSDN.


EDIT: Без дополнительной информации, чем «она не работает в C,» Я даже не знаю, какие из указанных выше предложений, которые вы пробовали. Как я и предположил, я не уверен, что второй будет работать с прямым C (никогда не пробовал), но я не вижу причин, почему первый не будет.

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

0

Вот решение. Решение обеспечивает [DllExport] атрибут, который aallows для вызова 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; 
    } 
} 

С код

int main() 
{ 
     int z = add(5,10); 
     printf("The solution is found!!! Z is %i",z); 
     return 0; 
} 
Смежные вопросы