C#外部调用非托管DLL问题太纠结在WINXP下一切正常WIN7报内存出错

abutwang 2011-09-16 05:35:34
特征就是 winxp下正常
到win7的时候,会报尝试读取或写入受保护的内存。这通常指示其他内存已损坏

断点跟踪的时候发现时回调函数结束后报错。

//原型: void (*callbackMessage)(void *data, const MQTTC_Message *msg);
[UnmanagedFunctionPointer(CallingConvention.Cdecl,CharSet=CharSet.Ansi)]
public delegate void callbackMessage(IntPtr data, ref MQTTC_Message msg);

// typedef struct
//{
// uint16_t mid; // 信息ID
// int8_t *topic; // 订阅信息的主题
// uint8_t *payload; // 订阅的信息,即数据
// uint32_t payloadlen; // 订阅的信息的长度
// int32_t qos; // 服务质量级别
// int8_t retain; // 保持,扩展功能使用
//}MQTTC_Message;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct MQTTC_Message
{
public ushort mid;
public string topic;
public Byte[] payload;
public uint payloadlen;
public int qos;
public char retain;
}

有人遇到过没
...全文
220 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
abutwang 2011-09-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sdl2005lyx 的回复:]

结构体对应有问题:

// uint8_t *payload; // 订阅的信息,即数据
原型应该是:byte *payload; 对吧?

你把它对应成:
public IntPtr payload;
[/Quote]

贴错了呵呵是 INTPTR PAYLOAD

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct MQTTC_Message
{
public ushort mid;
public string topic;
public IntPtr payload;
public uint payloadlen;
public int qos;
public char retain;
}
sdl2005lyx 2011-09-16
  • 打赏
  • 举报
回复
结构体对应有问题:

// uint8_t *payload; // 订阅的信息,即数据
原型应该是:byte *payload; 对吧?

你把它对应成:
public IntPtr payload;



宝_爸 2011-09-16
  • 打赏
  • 举报
回复
xp下没有问题说明C#中的声明没有问题。

看看能不能让非托管dll的作者在win7进行下调试。
abutwang 2011-09-16
  • 打赏
  • 举报
回复
每人懂骨
火星大能猫 2011-09-16
  • 打赏
  • 举报
回复
生成类型选择X86有时候也能解决一些特殊的问题
sdl2005lyx 2011-09-16
  • 打赏
  • 举报
回复
解决就好!。。。。
abutwang 2011-09-16
  • 打赏
  • 举报
回复
问题解决了,
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct MQTTC_Message
{
public ushort mid;
public IntPtr topic;
public IntPtr payload;
public uint payloadlen;
public int qos;
public char retain;
}
win7 还是比较严谨的

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧