Некоторые вещи делать на C# гораздо удобнее,чем на C++. Поэтому если нужно написать какую-то тулзу или редактор, то я обычно использую именно C#. Сегодня у нас с коллегами возник вопрос, возможно ли использовать .NET для написания плагинов для не .NET приложений. Для этого обеспечить экспорт соответствующего набора функций. Мне удалось это обеспечить с помощью использования С++\CLI. Экспортируемые функции помещаются в unmanaged область с помощью #pragma unmanaged. А уже из них можно вызывать managed код. Я сделал следующим образом.
#include <windows.h>
using namespace System;
//Мэнеджед функция, из которой
//можно использовать все возможности .NET
void test(const char* data, int size)
{
//String может быть создан
System::String ^str = gcnew System::String(data);
Console::WriteLine(str);
}
//Немэнеджед часть, которая вызывается
// пользователем dll'ки.
#pragma unmanaged
void test1(const char* data, int size)
{
//А здесь из мэнеджед части вызывается немэнеджед код
test(data, size);
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL,
DWORD fdwReason, LPVOID lpvReserved)
{
return TRUE;
}
Я не исползьвовал собственно C#, но ничто не мешает в мэнеджед части использовать классы, написаные с помощью этого языка.