Установите функцию обратного вызова в библиотеке C равной функции C#
Это dll-драйвер для аппаратного устройства.
Для реализации они дали пример программирования на языке Си, сославшись на то, что я реализую его на языке c#.
Следующий код находится в DLL (C).
extern void (*NdProcSamples)(word dc, word phase, word sum_st, const NdPackChan *chans);
В Примере C они сделали это, как показано ниже, и я хочу, чтобы это было реализовано в c#
В приведенном ниже коде адрес функции NdprocSamples(from DLL) задается в переменной указателя, поэтому драйвер может перезванивать внутренне.
typedef void (*TProcSamples)(word dc, word phase, word sum_st, const NdPackChan *chans); //Call back Fucntion TProcSamples *pProcSamples; pProcSamples = (TProcSamples*) GetProcAddress(drv_lib, "NdProcSamples") //Gets address of function *pProcSamples = NdProcSamples; //Bleow gunction gets called by driver(DLL) void NdProcSamples(word dc, word phase, word sum_st, const NdPackChan *chans) { //logic goes here }
Что я уже пробовал:
Моя реализация в c# приведена ниже, но она не работает-это правильный путь, в котором я не уверен.
[UnmanagedFunctionPointer(CallingConvention.StdCall)] unsafe public delegate void DelNDProSamples(word dc, word phase, word sum_st, ref NdPackChan chans); IntPtr NdProcSampleAddress=WinApi.GetProcAddress("cpp.Dll","NdProcSamples"); DelNDProSamples CallBackDelegate = (DelNDProSamples)Marshal.GetDelegateForFunctionPointer(NdProcSampleAddress, typeof(DelNDProSamples)); CallBackDelegate(NdProcSamples);