求助,使用C#调用非托管DLL,出现“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”

xiaoyi63 2009-04-13 09:52:20
DLL在C中的调用方法
long recid,
ft;
Float realdata;
ERRBLOCK err;
DB2REAL (recid, ft, &realdata, &err);

结构体定义:已证实没有问题
[StructLayout(LayoutKind.Sequential)]
public struct ERRBLOCK
{
[MarshalAs(UnmanagedType.I2,SizeConst=16)]
public short ERRCODE; /* Error code returned by ACCESS routines */
[MarshalAs(UnmanagedType.I8, SizeConst = 32)]
public long ERR1;
[MarshalAs(UnmanagedType.I8, SizeConst = 32)]
public long ERR2;
}


在C#中调用
[DllImport("infoplus21_api.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
public static extern void DB2REAL(long tagId, long propertyId, out Single Value, out ERRBLOCK errMsg);

调用就会提示“ 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”
求助高手~~~~
...全文
150 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoyi63 2009-04-14
  • 打赏
  • 举报
回复
谢谢LS,就是输入类型的问题,结贴.
gomoku 2009-04-14
  • 打赏
  • 举报
回复
public static extern void DB2REAL(int tagId, int propertyId, ref float Value, ref ERRBLOCK errMsg);

c++ long (32bit) => c# int
xufzu123 2009-04-14
  • 打赏
  • 举报
回复
顶,关注~~

111,126

社区成员

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

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

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