我遇到了从C++中的P/Invoke C++ API获取正确数据的问题。 C++函数设置为取指针来存储请求的数据,以及大小和您想要检索的确切参数。显然,我的设置有问题,我正在寻找建议。 谢谢!在.Net中获取和读取非托管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()正确读取返回的指针?
在此先感谢!
我可以帮助你的第一件事是你需要使调用约定匹配。他们目前没有。 –
根据MSDN DWORD相当于C#中的uint ...第一个显然是一个指针...我有几个其他C++原型执行其他操作在类似的庄园中设置,他们都工作正常... – devHead
@丹 - 你知道吗我的意思是确保您的C#代码的调用约定与您的C++代码相匹配? –