2010-11-26 2 views
10

Мне интересно, как вызывать метод класса C# из C++ (Native, а не C++ CLI) кода? Нужен простой и изящный способкак вызвать C# из C++

+3

Как круто, как это может быть мысль больно – 2010-11-26 06:36:41

+0

возможный дубликат [Вызов C# код из C++] (http://stackoverflow.com/questions/778590/calling-c-sharp-code-from-c) – cdiggins 2014-04-21 16:21:05

ответ

9

Включите вашу сборку C# в COM-видимую и используйте COM-интерфейсы. Насколько я знаю, это единственный способ заставить его работать рядом с самим IPC. Проблема возникает из среды .NET, в которой должна выполняться сборка .NET, а C++ работает под собственной средой C++.

Единственный способ связи - это либо механизм IPC (сокеты, ...), либо использовать COM, поскольку процессы должны быть «развязаны».

Вот учебник для решения на основе COM:

+2

Согласно Саше есть еще два пути. – gideon 2010-11-26 06:38:17

+1

Yup, нет необходимости предлагать «развязку». «.Net» - это в основном mscoree.dll, и она может загружаться в собственных процессах. – MSalters 2010-11-26 08:11:22

9

Саша Гольдштейн человек, для этого материала:

Есть снова несколько способов сделать это: 1. Обратный P/Invoke (должен начинаться с .NET-делегата, переданного как обратный вызов, поэтому это полезно только в том случае, если «действие» начинается в вашем коде .NET); 2. COM interop (каждый класс .NET также может быть COM-объектом с явными интерфейсами или без него); 3. Классы оболочки C++/CLI.

См http://blogs.microsoft.co.il/blogs/sasha/archive/2008/02/16/net-to-c-bridge.aspx

Смотри также:
http://www.gregcons.com/KateBlog/CallingManagedCodeFromNativeCode.aspx

10

Вы можете встраивать любой сборки CLR (C#, VB.NET, F #, ...) в программе родной C++ с использованием того, что называется "CLR Hosting ». Это то, как встроенные программы (такие как SQL Server) поддерживают расширения кода .NET. Например. SQL CLR в SQL Server.

заряжаются CLR в нативный процесса с использованием CorBindToRuntimeEx() для .NET 2.0 и CLRCreateInstance() в .NET 4.

Подробности можно найти на MSDN, или книга Джеффа Рихтера CLR via C#.

-1

Самый простой способ - использовать C++/CLI. Если вы не можете использовать это в своем коде, напишите обертку dll и вызовите эту dll.

Смежные вопросы