Инициирующее событие в C # из C ++ DLL

У меня есть неуправляемая C ++ DLL, которая взаимодействует с сервером Cisco (UCCX).

Он отправляет и получает сообщения на и с этого сервера через TCP / IP. Теперь есть несколько типов сообщений, которые он получает, которые содержат некоторые параметры, которые нужно отправить в графический интерфейс C #, который будет отображать эти параметры на экране.

Пожалуйста, скажите мне эффективный метод для запуска события в C # из этой DLL.

6

Решение

http://blogs.msdn.com/b/davidnotario/archive/2006/01/13/512436.aspx кажется, отвечает на ваш вопрос. Вы используете делегата на стороне C # и стандартного обратного вызова на стороне C ++.

Сторона C ++:

typedef void (__stdcall *PFN_MYCALLBACK)();
int __stdcall MyUnmanagedApi(PFN_ MYCALLBACK callback);

Сторона C #

public delegate void MyCallback();
[DllImport("MYDLL.DLL")] public static extern void MyUnmanagedApi(MyCallback callback);

public static void Main()
{
MyUnmanagedApi(
delegate()
{
Console.WriteLine("Called back by unmanaged side");
}
);
}
7

Другие решения

Обратите внимание, что сторона C ++ должна быть

typedef void (__stdcall *PFN_MYCALLBACK)();
extern "C" __declspec(dllexport) void __stdcall MyUnmanagedApi(PFN_ MYCALLBACK callback);

Альтернативный вариант — сбросить __stdcall на стороне C ++.

typedef void (*PFN_MYCALLBACK)();
extern "C" __declspec(dllexport) void MyUnmanagedApi(PFN_ MYCALLBACK callback);

И на стороне C #:

public delegate void MyCallback();
[DllImport("MYDLL.DLL", CallingConvention = CallingConvention.Cdecl))]
public static extern void MyUnmanagedApi(MyCallback callback);

as above ...
0

По вопросам рекламы [email protected]