1
我想從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 2012-03-26 07:59:24
對不起,大部分時間我在做互操作時,函數指針是來回編組結構的一部分。事實證明你確實需要將它變成一個'IntPtr'並且調用'Marshal.GetFunctionPointerForDelegate'。我會爲此更正答案。 – 2012-03-26 22:29:28
不要修復它,pinvoke編組已經做到了。您的代碼現在不能編譯,無法傳遞IntPtr。 – 2012-03-26 23:50:06