代码如下:
[DllImport("wsnmp32.dll")]
public static extern SNMPAPI_STATUS SnmpStrToOid(StringBuilder str, ref SMIOID oid);
StringBuilder name2 = new StringBuilder(256);
name2.Append("1.3.6.1.2.1.2.2.1.16");
SnmpAPI.SnmpStrToOid(name2, ref Oid);
使用果网上很多方法都不行,SnmpAPI.SnmpStrToOid总会抛出“尝试读取或写入受保护的内存。这通常指示其他内存已损坏”这个异常。请问各位高手怎么解决,谢谢,分数不够可以另开贴加分另外还有另一个方法也是这样出错
[DllImport("wsnmp32.dll")]
public static extern IntPtr SnmpCreateVbl(IntPtr session, ref SMIOID name, ref SMIVALUE value); vbl = SnmpAPI.SnmpCreateVbl(session_id, ref Oid, ref sv);
这两个方法会有什么共通之处吗另外所用结构体为
[StructLayout(LayoutKind.Sequential)]
public struct SMIOID
{
public uint size;
public IntPtr dwords;
}
[StructLayout(LayoutKind.Explicit)]
public struct SMIVALUE
{
[FieldOffset(0)]
public SNMPAPI_SYNTAX type;
[FieldOffset(4)]
public SMIVUNION val;
}
[DllImport("wsnmp32.dll")]
public static extern SNMPAPI_STATUS SnmpStrToOid(StringBuilder str, ref SMIOID oid);
StringBuilder name2 = new StringBuilder(256);
name2.Append("1.3.6.1.2.1.2.2.1.16");
SnmpAPI.SnmpStrToOid(name2, ref Oid);
使用果网上很多方法都不行,SnmpAPI.SnmpStrToOid总会抛出“尝试读取或写入受保护的内存。这通常指示其他内存已损坏”这个异常。请问各位高手怎么解决,谢谢,分数不够可以另开贴加分另外还有另一个方法也是这样出错
[DllImport("wsnmp32.dll")]
public static extern IntPtr SnmpCreateVbl(IntPtr session, ref SMIOID name, ref SMIVALUE value); vbl = SnmpAPI.SnmpCreateVbl(session_id, ref Oid, ref sv);
这两个方法会有什么共通之处吗另外所用结构体为
[StructLayout(LayoutKind.Sequential)]
public struct SMIOID
{
public uint size;
public IntPtr dwords;
}
[StructLayout(LayoutKind.Explicit)]
public struct SMIVALUE
{
[FieldOffset(0)]
public SNMPAPI_SYNTAX type;
[FieldOffset(4)]
public SMIVUNION val;
}
http://hi.baidu.com/h_tang77/blog/item/6b510c23d58745549922ed09.html
[DllImport("Wsnmp32.dll")]
private static extern UInt32 SnmpStrToOid([In,MarshalAs(UnmanagedType.LPTStr)] string snmpstr, [Out, MarshalAs(UnmanagedType.Struct)] out smiOID dstOID);
StringBuilder name2 = new StringBuilder(256);
name2.Append("1.3.6.1.2.1.2.2.1.16");
SnmpAPI.SnmpStrToOid(name2, ref oid);
ghc.Free();
可能参数转化有问题,有符号无符号的问题,楼上说的也是一种可能~
public struct SMIOID
{
public uint size;
[MarshalAs(UnmanagedType.SysUInt, SizeConst = 32)]
public IntPtr dwords;
}
不知这样行不行啊