问题: C#程序里面可以收到C程序传来的数据包.但是每次只有一个BYTE.无论C程序里面数据包长度大小是多少.
方案:
向C程序传递一个函数指针(C#中为委托)过去。
C#里面定义一个响应数据包的方法,将此方法封装在委托中,传给C程序,
C程序那里收到数据包时即可调用该方法。
C#启动C的服务-->C#向C程序注册函数指针-->C服务在适当的时候回调C#注册的该方法
C#程序
public delegate void dele_newPacket(Byte[] packet);
public static void newPacket(Byte[] packet)
{}
[DllImport("Win32-Server-DLL.dll", EntryPoint = "start_delegate")]
public static extern void start_delegate(dele_newPacket packet);
CS_Console_1.Program.dele_newPacket packet = CS_Console_1.Program.newPacket;
CS_Console_1.Program.start_delegate(packet);
C代码:
void (_stdcall *dele_func)(BYTE* );//全局变量
void start_delegate(void(_stdcall *start_address )( BYTE* ) )
{
printf("start_delegate call start:\n");
dele_func = start_address;
(*dele_func)((BYTE*)packet);//packet最长是1024BYTE
printf("start_delegate call end:\n");
}
只要数据包正确传入C#程序就可以了,在C#里面进行数据包处理. 请帮忙啊.