结构体指针的问题,寻求高手

Carpathia 2009-09-08 10:01:45
delegate void jdkCALLBACK(int nType, ref IntPtr pContext);
是一个回调函数,在调用C++DLL的方法里会回调一个函数出来,目前的问题在于回调出来的指针类型没有办法转换成结构体,结构体如下:
public struct test
{
public int m_devId;
public char[] m_pstrIp;
public int m_sPort;
}
当回调函数出现时,使用结构体指针转换这里出错
testentries = (test)Marshal.PtrToStructure(pContext, typeof(test));
出错信息为:
运行库遇到了错误。此错误的地址为 0x79ee2552,在线程 0x63c 上。错误代码为 0xc0000005。此错误可能是 CLR 中的 bug,或者是用户代码的不安全部分或不可验证部分中的 bug。此 bug 的常见来源包括用户对 COM-interop 或 PInvoke 的封送处理错误,这些错误可能会损坏堆栈。
我怀疑是在封送结构体指针的时候出了错误,不知道该如何操作,所以请教各位高手
...全文
114 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Carpathia 2009-09-08
  • 打赏
  • 举报
回复
我顶
Carpathia 2009-09-08
  • 打赏
  • 举报
回复
补充,C++的结构体指针
typedef struct
{
int m_devId;
char m_pstrIp[20];
short m_sPort;
}test, *LPCONFIGINFO;
mjp1234airen4385 2009-09-08
  • 打赏
  • 举报
回复
你最好,把C++的结构体申明发一下,好让大家帮你分析。
初步估计是你的结构体申明不正确。
yuanhuiqiao 2009-09-08
  • 打赏
  • 举报
回复
没遇到过,试试Unsafe编程
jy251 2009-09-08
  • 打赏
  • 举报
回复
我也觉得是结构体的定义问题,毕竟是使用C++的DLL,那是非托管的。

定义结构体的时候,最好指定一下
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]

至于charset是不是unicode,你可以换换其他的类型试试。

在定义char数组的时候使用
[MarshalAs(UnmanagedType.LPWStr, SizeConst = 100)]

类型和大小,类型的话,也不一定是LPWSTR,也可以试试ByValArray,或者其他什么类型。
TTOJJ 2009-09-08
  • 打赏
  • 举报
回复
注意结构要使用[StructLayOut]属性

110,534

社区成员

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

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

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