typedef struct
{
char m_multiip[16]; //多播地址
WORD m_wMultiPort;  //多播端口
WORD m_wLocaport;   //本地端口
int m_videobuff;    //音频buff数量
int m_audiobuff;    //视频buff数量
int m_channuser;    //通道用户数
int m_totaluser;    //系统用户数
int (WINAPI *m_UserCheckcallback)(char *m_url,char *username,char *password);
                    //转发连接时用户验证
int (WINAPI *m_UserConnectcallback)(char *m_sername,int channel,BOOL bStart,char *m_userurl,char *username,char *password,int transtype,long handle);
                    //转发用户连接或断开回调函数
}VSNET_REDIRECTORINFO;int (WINAPI *m_UserCheckcallback)(char *m_url,char *username,char *password)int (WINAPI *m_UserConnectcallback)(char *m_sername,int channel,BOOL bStart,char *m_userurl,char *username,char *password,int transtype,long handle);

解决方案 »

  1.   

    一样啊将一些winaip什么的去掉就好指针用ref,word是什么不记得了(long?)不记得了你自己网上搜索一下就有了
      

  2.   

    public delegate int m_UserCheckcallback(string m_url, string username, string password);
        public delegate int m_UserConnectcallback(string m_sername, int channel, bool bStart, string m_userurl, string username, string password, int transtype, IntPtr handle);
        [StructLayout(LayoutKind.Sequential)]
        public struct VSNET_REDIRECTORINFO
        {
           public string m_multiip;//多播地址,最多16位
            public ushort m_wMultiPort;//多播端口
            public ushort m_wLocaport;//本地端口
            public int m_videobuff;//音频buff数量
            public int m_audiobuff;//视频buff数量
            public int m_channuser;//通道用户数
            public int m_totaluser;//系统用户数
            public m_UserCheckcallback n_UserCheckcallback;//转发连接时用户验证
            public m_UserConnectcallback n_UserConnectcallback;//转发用户连接或断开回调函数    }[DllImport("NetClient.dll")]
    public static extern bool VSNET_SetRedirectorInfo(ref VSNET_REDIRECTORINFO m_pRedirect);//设置转发服务器参数
    /// <summary>
            /// 设置转发服务器
            /// </summary>
            /// <param name="myurl">IP地址</param>
            /// <param name="dbdk">多播端口</param>
            /// <param name="bddk">本地端口</param>
            /// <returns>返回是否成功</returns>
            public int SetRedirector(string myurl, ushort dbdk, ushort bddk)
            {
                VSNET_REDIRECTORINFO redirector = new VSNET_REDIRECTORINFO();
                redirector.m_multiip = myurl.Trim();
                redirector.m_wMultiPort = dbdk;
                redirector.m_wLocaport = bddk;
                redirector.m_videobuff = 50;
                redirector.m_audiobuff = 50;
                redirector.m_channuser = 300;
                redirector.m_totaluser = 300;
                redirector.n_UserCheckcallback = null;
                redirector.n_UserConnectcallback = null;            bool setinfo = VideoSApi.VSNET_SetRedirectorInfo(ref redirector);
                int isstart = -1;
                if (setinfo)
                {
                    isstart = VideoSApi.VSNET_StartListenClient(myurl);
                }
                return isstart;
            }
    我是这么写的,但是不知道为什么怎么搞都不对,大家帮忙看看什么问题啊
      

  3.   

    [StructLayout(LayoutKind.Sequential)]
        public struct VSNET_REDIRECTORINFO
        {
            [MarshalAs(UnmanagedType.ByValTStr,SizeConst=16)] 
            public string m_multiip;//多播地址,最多16位
           ........
            [MarshalAs(UnmanagedType.FunctionPtr)]
            public m_UserCheckcallback n_UserCheckcallback;//转发连接时用户验证
            [MarshalAs(UnmanagedType.FunctionPtr)]
            public m_UserConnectcallback n_UserConnectcallback;//转发用户连接或断开回调函数    }
      

  4.   

    C# 的 char 是 C++ 的 wchar_t
    string 改 SByte[] 试试?