在文档里关于dll的一个方法是这么描述的:SetCallback设置回调函数。必须在所有OpenConnect或StartListen之前调用此函数。 BOOL __stdcall SetCallback( LPONACCEPT lpOnAccept, LPONCONNECTCLOSE lpOnConnectClose, LPONERROR lpOnError, LPONRECECONFIGDATA lpOnReceConfigData, LPONRECEFROMCOM lpOnReceFromCOM, LPONSWITCHCHANGE lpOnSwitchChange
); 参数:lpOnAccept [in] 设置OnAccept回调函数的指针。lpOnConnectClose [in] 设置OnConnectClose回调函数的指针。lpOnError [in] 设置OnError回调函数的指针。lpOnReceConfigData [in] 设置OnReceConfigData回调函数的指针。使用透明Socket通信时,本函数不会被调用。lpOnReceFromCOM [in] 设置OnReceFromCOM回调函数的指针。如果设为NULL,则将采用默认的回调函数,并可使用ReceiveData函数接收数据。lpOnSwitchChange [in] 设置OnSwitchChange回调函数的指针。使用透明Socket通信时,本函数不会被调用。 返回值: 成功返回非零,失败返回零。
我试图写了写它的声明
[DllImport("EdSockServer.dll")]
public static extern bool SetCallback(Int32 lpOnAccept, Int32 lpOnConnectClose, Int32 lpOnError, Int32 lpOnReceConfigData, Int32 lpOnReceFromCOM, Int32 lpOnSwitchChange);
并且这么调用的方法SetCallback(OnAccept,0,0,0,0,0);OnAccept方法我已经定义好了,但是系统就是提示错误,说明我还是没有建立好那种托管,请问高手我应该怎么写,谢谢了!
); 参数:lpOnAccept [in] 设置OnAccept回调函数的指针。lpOnConnectClose [in] 设置OnConnectClose回调函数的指针。lpOnError [in] 设置OnError回调函数的指针。lpOnReceConfigData [in] 设置OnReceConfigData回调函数的指针。使用透明Socket通信时,本函数不会被调用。lpOnReceFromCOM [in] 设置OnReceFromCOM回调函数的指针。如果设为NULL,则将采用默认的回调函数,并可使用ReceiveData函数接收数据。lpOnSwitchChange [in] 设置OnSwitchChange回调函数的指针。使用透明Socket通信时,本函数不会被调用。 返回值: 成功返回非零,失败返回零。
我试图写了写它的声明
[DllImport("EdSockServer.dll")]
public static extern bool SetCallback(Int32 lpOnAccept, Int32 lpOnConnectClose, Int32 lpOnError, Int32 lpOnReceConfigData, Int32 lpOnReceFromCOM, Int32 lpOnSwitchChange);
并且这么调用的方法SetCallback(OnAccept,0,0,0,0,0);OnAccept方法我已经定义好了,但是系统就是提示错误,说明我还是没有建立好那种托管,请问高手我应该怎么写,谢谢了!
ms-help://MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconcallbacksample.htm
DllImport("EdSockServer.dll")]
public static extern bool SetCallback(AcceptHandler lpOnAccept, Int32 lpOnConnectClose, Int32 lpOnError, Int32 lpOnReceConfigData, Int32 lpOnReceFromCOM, Int32 lpOnSwitchChange);AcceptHandler pAcceptHandler = new AcceptHandler(OnAccept);
SetCallback(pAcceptHandler,0,0,0,0,0);AcceptHandler就是你的代理类型,意思应该可以理解就行了。补充一句,所谓定义就是在保证接口一致的情况下,自己怎么调用方便怎么去定义。Int32步就是一个指针么,可以有很多种写法的。
using System.Runtime.InteropServices;/// <summary>
/// Class2 的摘要说明
/// </summary>
public class Class2
{
public class Got222
{
public delegate void OnAcceptHandler(Int32 ConnectID);
public delegate void OnConnectClose();
public delegate void OnError();
public delegate void OnReceConfigData();
public delegate void OnReceFromCOM();
public delegate void OnSwitchChange();
[DllImport("EdSockServer.dll")]
public static extern bool OpenConnect(String PeerIP, Int32 PeerPort, String LocalIP, Int32 LocalPort);
[DllImport("EdSockServer.dll")]
public static extern bool SetSocket(bool IsSocketValue);
[DllImport("EdSockServer.dll")]
public static extern bool SetCallback(OnAcceptHandler lpOnAccept, OnConnectClose lpOnConnectClose, OnError lpOnError, OnReceConfigData lpOnReceConfigData, OnReceFromCOM lpOnReceFromCOM, OnSwitchChange lpOnSwitchChange); public static bool CONNECT()
{
OnAcceptHandler pMyOnAccept = new OnAcceptHandler(MyOnAccept);
OnConnectClose pMyOnConnectClose = new OnConnectClose(MyOnConnectClose);
OnError pMyOnError = new OnError(MyOnError);
OnReceConfigData pMyOnReceConfigData = new OnReceConfigData(MyOnReceConfigData);
OnReceFromCOM pMyOnReceFromCOM = new OnReceFromCOM(MyOnReceFromCOM);
OnSwitchChange pMyOnSwitchChange = new OnSwitchChange(MyOnSwitchChange);
bool result=false; String PeerIP="192.101.1.114";
Int32 PeerPort = 8000;
String LocalIP = "";
Int32 LocalPort = 8000; bool aaa=SetSocket(false); bool bbb=SetCallback(pMyOnAccept, pMyOnConnectClose, pMyOnError, pMyOnReceConfigData, pMyOnReceFromCOM, pMyOnSwitchChange);
if (OpenConnect(PeerIP,PeerPort,LocalIP,LocalPort))
{
result=true;
} return result;
} public static void MyOnAccept(Int32 ConnectID)
{
}
public static void MyOnConnectClose()
{ }
public static void MyOnError()
{ }
public static void MyOnReceConfigData()
{ }
public static void MyOnReceFromCOM()
{ }
public static void MyOnSwitchChange()
{ }
}
}请问是否是这样
这个代码在
bool bbb=SetCallback(pMyOnAccept, pMyOnConnectClose, pMyOnError, pMyOnReceConfigData, pMyOnReceFromCOM, pMyOnSwitchChange);
这一行,bbb得到的是false
说明还有问题
请帮忙看一下,谢谢
=================〉
public delegate void OnAcceptHandler( System.IntPtr handler );
试试
欢迎大家在此讨论关于.net的各种技术。1号群
这里没有高手!只有:互相学习,共同进步!
让我们的激情燃烧!!!