将委托从c#传递给c作为函数参数

时间:2012-03-26 07:05:19

标签: c# visual-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
}

我该怎么做?请帮忙。

1 个答案:

答案 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);