C#下调用C++ DLL中函数
查询局域网设备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#中应该如何定义 --------------------编程问答-------------------- char* 试试string或stringbuilder
int* 试试 ref int --------------------编程问答--------------------
[out]szBuf
用户开辟缓存,用来接收DEVICE_NET_INFO结构体,查询到几个设备,就返回几个这样的结构体
这个参数输出的是结构 --------------------编程问答-------------------- /// <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);
可以试试
--------------------编程问答-------------------- 1.把结构体定义贴出来
2.用定义的结构体数组作为szBuf的参数类型,并指定[Out][MarshalAs(UnmanagedType.LPArray)] --------------------编程问答--------------------
结构如下:
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
保留字节
--------------------编程问答-------------------- 顶起来 --------------------编程问答-------------------- http://wenku.baidu.com/view/5126f84b2b160b4e767fcf85.html?st=1这个绝对有用! --------------------编程问答-------------------- 自己先顶起来,希望有高手来帮忙解决 --------------------编程问答-------------------- --------------------编程问答-------------------- 自己先顶起来,希望有高手来帮忙解决 --------------------编程问答-------------------- 求达人解答 --------------------编程问答-------------------- 最后结果解决了吗?我也遇到这个问题啊
补充:.NET技术 , C#