Как использовать управляемый код из неуправляемого кода? - PullRequest
5 голосов
/ 28 октября 2009

Как мне вызвать .NET-код из нативного C ++ (неуправляемый код)? Я хочу предоставить .NET-код своему неуправляемому (C ++) приложению, а затем использовать его. Более конкретно, я хочу вызвать C # из родного C ++ :). Я знаю, что есть много способов, но не могли бы вы рассказать мне о плюсах и минусах каждого из них? Кстати, я не хочу использовать COM, так какие варианты сейчас?

Возможно ли, чтобы я обернул код C # в C ++ / CLI, а затем вызвал его из C ++? Если да, то как мне это сделать? Как обернуть C # в C ++ / CLI, а затем вызвать его из C ++?

Ответы [ 4 ]

5 голосов
/ 30 октября 2009

Я писал об этом только недавно. Речь шла о Delphi, но это не значит, что он не будет работать и с C ++.

.NET компонент в DELPHI 2009

Даже не зная много о C ++, я все же знаю, что IUnknown и COM-совместимые ссылки на интерфейсы должны прекрасно работать с C ++ (в случае, если вам нужно передавать объекты, а не только структуры).

  • Вы можете использовать Microsoft C ++ / CLI для ссылки на ваш код C # и экспортировать его как обычные функции DLL.
  • Вы также можете загрузить задачу MSBuild , которую я написал, которая позволяет экспортировать функции непосредственно из C #. Аналогично тому, как используется атрибут DllImportAttribute.

Этот код на C # экспортирует функцию «YourExportName», которую можно использовать так же, как и любую другую c-совместимую функцию.


class Sample
{
   [DllExport("YourExportName")]
   static int TestFunction(int left, int right)
   {
     return left + right;
   }
}
1 голос
/ 09 ноября 2009

Вы всегда можете вставить Mono. Я лично сделал это в двух проектах, и это достаточно просто. Следуйте Embedding Mono для получения дополнительной информации.

0 голосов
0 голосов
/ 28 октября 2009

Вы можете выставить управляемый компонент как COM-объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...