Могу ли я вызывать функции через границы языка программирования, используя указатель на функцию? - PullRequest
0 голосов
/ 25 февраля 2019

Приложение AC # имеет статическую зависимость от C ++ DLL.Допустим, есть функция в приложении C #, как показано ниже:

void foo(int a)
{
   Console.WriteLine(a);
}

В C ++ DLL есть экспортированная функция, которая выглядит следующим образом.

typedef void (*Func_t)(int);
extern "C" __declspec(dllexport) void bar(Func_t f)
{
   f(5);
}

Можно ли вызвать функцию bar()из приложения C # и передайте foo() в качестве параметра и ожидайте, что будет напечатано «5»?

bar(foo);

1 Ответ

0 голосов
/ 25 февраля 2019

Определение делегата

[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
delegate void Func_t(int a);

Импорт функции

[DllImport(...)]
static extern void bar(Func_t f);

Использование

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