Я хочу передать делегат на C из C#, как показано ниже.передать делегат от C# до c как параметр функции
// C# код
Main()
{
//something
public delegate int watch(int BytesLeft, IntPtr response);
watch test1 = fun1;
SendImage(FileArray,Length,test1);
int fun1(int BytesLeft, IntPtr response)
{
//unmarshall response
}
}
C код показан ниже код
// C
SendImage(int data, int len, <function_ptr>test)
{
//something
unsigned char ptr[10];
ptrByte = &ptr[0];
//something
for(i=0;i<num_of_packet,i++)
{
TLayer();//something:some call
int check=0;
check = test(bytes_left, ptrByte);
}
//something
}
Как я могу это сделать? Пожалуйста помоги.
Не нужно использовать ** Marshal.GetFunctionPointerForDelegate **? – SHRI
Извините, большую часть времени, когда я выполняю interop, указатели функций являются частью структур, которые сортируются взад и вперед. Оказывается, вам действительно нужно сделать его «IntPtr» и вызвать «Marshal.GetFunctionPointerForDelegate». Я исправлю ответ для этого. –
Не исправляйте это, маркшаллер pinvoke уже делает это. Ваш код сейчас не компилируется, не может передать IntPtr. –