пятница, 7 января 2011 г.

C++ знакомится с C#

Небольшая памятка, как вызвать с++ unmanaged код из c#.
Создаем dll на плюсах (обычная, не /clr!), где обьявляем экспортируемые функции:
extern "C" __declspec(dllexport) int __stdcall Plus(int a, int b) 
{ 
return a+b; 
}

Далее в шарповом коде создаем небольшой классик, экспортируем функцию и оборачиваем ее для удобства, вот так:

class Wrapper
{
[DllImport("Wrapper.dll")]
static extern int Plus(int a, int b);

public static int plus(int a, int b)
{
try
{
return Plus(a,b);
}
catch (DllNotFoundException e)
{
Console.WriteLine(e.ToString());
}
catch (EntryPointNotFoundException e)
{
Console.WriteLine(e.ToString());
}

return 0;
}
};

Далее использовать функцию следует вот так:
int result = Wrapper.plus(66,11);

Собственно все. Сейчас в одном из проектов реализуется идея написания гуи на шарпе, логики – на плюсах, что получится в итоге – увидим, отчитаюсь. Пока все достаточно удобно.