在文档里关于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方法我已经定义好了,但是系统就是提示错误,说明我还是没有建立好那种托管,请问高手我应该怎么写,谢谢了!

解决方案 »

  1.   


    ms-help://MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconcallbacksample.htm
      

  2.   

    不需要定义Int32,直接定义为代理类型。然后创建一个代理的实例,调用就行了。我觉得应该这样写:
    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步就是一个指针么,可以有很多种写法的。
      

  3.   

    using System;
    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
    说明还有问题
    请帮忙看一下,谢谢
      

  4.   

    http://www.aspxboy.com/private/showthread.asp?threadid=369
      

  5.   

    public  delegate void OnAcceptHandler(Int32 ConnectID);
    =================〉
     public  delegate void OnAcceptHandler( System.IntPtr handler );
    试试
      

  6.   

    技术交流群号:23266021
    欢迎大家在此讨论关于.net的各种技术。1号群
    这里没有高手!只有:互相学习,共同进步!
    让我们的激情燃烧!!!