我想将委托从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
}
我该怎么做?请帮忙。
答案 0 :(得分:0)
您必须使用与您的其他P / Invoke方法签名具有相同调用约定的UnmanagedFunctionPointerAttribute标记委托。
然后C#自动处理函数指针的编组,SendImage
的P / Invoke签名看起来像这样(假设您的委托类型与示例中的watch
相同):< / p>
[DllImport(...)]
public extern void SendImage(int data, int len, watch test);
此外,您的委托类型声明如下所示:
[UnmanagedFunctionPointer(...)]
public delegate int watch(int BytesLeft, byte response);