我遇到了從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++代碼相匹配? –