我在从 C# 中的 P/Invoke 的 C++ API 获取正确数据时遇到问题。C++ 函数设置为采用一个指针来存储请求的数据,以及大小和要检索的确切参数。我的设置显然有问题,我正在寻找建议。谢谢!
C++ 原型:
DECL_FOOAPIDLL DWORD WINAPI FOO_GetVal(
VOID *Val, //pointer to memory where the data will be stored by the function
DWORD Len, //length of Val in bytes
DWORD Id //identification number of the parameter
);
C# P/Invoke 签名:
[DllImport(FOO_API, CharSet = CharSet.Auto)]
static public extern uint FOO_GetVal(IntPtr val, uint len, uint id);
我的 C# 代码以获取有关设置的信息:
IntPtr Ptr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(IntPtr)));
uint hr = FOOWrapper.FOO_GetVal(Ptr, (uint)Marshal.SizeOf(Ptr), FOOWrapper.CMD_RUNNING);
int result = Marshal.ReadInt32(Ptr);
Marshal.FreeHGlobal(Ptr);
所以最大的问题是我是否通过 Marshal.ReadInt32() 正确读取返回的指针?
提前致谢!