我需要在我的 C# 代码中使用本机 dll (WNSMP32.dll) 中的以下函数。
SNMPAPI_STATUS SnmpStartupEx( _Out_ smiLPUINT32 nMajorVersion,...);
//Considering just one for purpose of discussion
为此,我将 dllimport 声明为
[DllImport("wsnmp32.dll")] internal static extern
Status SnmpStartupEx(out IntPtr majorVersion, ...);
//Considering just one for purpose of discussion
我正在使用该功能
IntPtr majorVersion = Marshal.AllocHGlobal(sizeof(UINT32))
status = SnmpStartupEx(out majorVersion, out minVersion,
out level, out translateMode, out retransmitMode )
分配内存后,我正在打印 IntPtr 的值。
<<<DEBUG OUTPUT>>> IntPtr Value = 112235522816
然而,在调用 之后,我发现 IntPtr 正在改变!
<<<DEBUG OUTPUT>>> IntPtr after calling SnmpStartupEx
<<<DEBUG OUTPUT>>> IntPtr Value = 111669149698
- 我应该在通话前通过 Marshal.AllocHGlobal 分配内存吗?
- 调用后更改 IntPtr 的地址是否有效?