110,539
社区成员
发帖
与我相关
我的任务
分享
void Connecter(int ServerPort,void(* pF)(char* buf,char* ClientIP,int ClientPort));
public partial class Default
{
[DllImport("MyServerDLL.dll",
EntryPoint = "Connecter",
CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern void Connecter(int ServerPort, IntPtr P);
public delegate void FunctionDelegate(IntPtr buf, IntPtr ClientIP, int ClientPort);
void Callback(IntPtr buf, IntPtr ClientIP, int ClientPort)
{
showLb.Text = buf.ToString();
}
。。。
protected void serverBtn_Click(object sender, EventArgs e)
{
//IntPtr intPtr = new IntPtr();----------------如果这样写,异常:值不能为空。参数名: ptr
//int nSizeOfCallback = Marshal.AllocHGlobal(Callback);-------------如果这样写,由于Callback是函数,所以不能Marshal.AllocHGlobal(Callback);
//IntPtr intPtr = Marshal.AllocHGlobal(nSizeOfCallback);-----我将nSizeOfCallback改为64注释掉上一行,试验一下,提示:指定结构必须能直接复制到本机结构中,或是具有布局信息。
参数名: structure
Marshal.StructureToPtr(new FunctionDelegate(Callback).Target, intPtr, true);
Connecter(5000, intPtr);
}
}