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()を介して返されたポインターを正しく読み取っていますか?
前もって感謝します!