查询局域网设备BOOL CLIENT_SearchDevices(
  char*      szBuf,
  int        nBufLen,
  int*       pRetLen,
  DWORD      dwSearchTime
);
Parameters
[out]szBuf 
用户开辟缓存,用来接收DEVICE_NET_INFO结构体,查询到几个设备,就返回几个这样的结构体 
[in]nBufLen 
szBuf缓存长度 
[out]pRetLen 
返回DEVICE_NET_INFO结构体长度之和 
[in]dwSearchTime 
查询等待时间 
请问这个函数在C#中应该如何定义

解决方案 »

  1.   

    char* 试试string或stringbuilder
    int* 试试 ref int
      

  2.   


    [out]szBuf  
    用户开辟缓存,用来接收DEVICE_NET_INFO结构体,查询到几个设备,就返回几个这样的结构体  这个参数输出的是结构
      

  3.   

    /// <summary>
            /// QQ/TM聊天记录获取
            /// </summary>
            [StructLayout(LayoutKind.Sequential, Pack = 1)]
            public struct SendQQMsgInfo
            {
                /// <summary>
                /// 聊天类型:0=单人聊天,1=群聊天,2=讨论组聊天
                /// </summary>
                public uint QQMsgType;
                /// <summary>
                /// 本机QQ号码
                /// </summary>
                public uint SourceQQNum;
                /// <summary>
                /// 对方QQ号码
                /// </summary>
                public uint DestinationQQNum;
                /// <summary>
                /// 群号码或聊天组号码
                /// </summary>
                public uint GroupNum;
                /// <summary>
                /// 消息类型:true=发送,false=接收
                /// </summary>
                public bool bSend;
                /// <summary>
                /// 本机QQ昵称
                /// </summary>
                [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 30)]
                public string SourceString;
                /// <summary>
                /// 对方QQ昵称或群聊天中消息发送人的昵称
                /// </summary>
                [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 40)]
                public string DestinationString;
                /// <summary>
                /// 群名或聊天组名
                /// </summary>
                [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 30)]
                public string GroupNameString;
                /// <summary>
                /// 消息内容
                /// </summary>
                [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 7000)]
                public string TextString;
            }结构体定义其中string在c++中是char[30]\char[7000]等等
    char*如果在结构体里。最好放在结构体最后面。越长的越放后面
     /// <summary>
            /// 取消QQ的进程保护(若不取消则无法获取聊天记录)
            /// </summary>
            /// <returns></returns>
            [DllImport("DCKillQQProctect.dll")]
            public static extern bool KillQQProctect();        /// <summary>
            /// 获取QQ/TM聊天记录
            /// </summary>
            /// <param name="sendmess"></param>
            /// <returns></returns>
            public delegate bool GetQQMsg(ref SendQQMsgInfo sendmess);以上是我的写法。通过测试的public delegate bool CLIENT_SearchDevices(byte[] szBuf,int nBufLen,ref pRetLen,DWORD dwSearchTime);
    可以试试
      

  4.   

    1.把结构体定义贴出来
    2.用定义的结构体数组作为szBuf的参数类型,并指定[Out][MarshalAs(UnmanagedType.LPArray)]
      

  5.   


    结构如下:DEVICE_NET_INFO{
      char   szIP[DH_MAX_IPADDR_LEN];  
      int    nPort; 
      char   szSubmask[DH_MAX_IPADDR_LEN];
      char   szGateway[DH_MAX_IPADDR_LEN];
      char   szMac[DH_MACADDR_LEN];
      char   szDeviceType[DH_DEV_TYPE_LEN];
      BYTE   bReserved[32];
    };
    Members
    szIP 
    IP地址,字符串形式。 
    nPort 
    端口号,本地序。 
    szSubmask 
    子网掩码,字符串形式。 
    szGateway 
    网关,字符串形式 
    szMac 
    MAC地址,字符串形式。 
    szDeviceType 
    设备类型,字符串形式 
    bReserved 
    保留字节 
      

  6.   

    http://wenku.baidu.com/view/5126f84b2b160b4e767fcf85.html?st=1这个绝对有用!