我一直在瀏覽本網站很長一段時間&感謝您對其他人的問題的答案 - 現在,唉,我必須透露我的通過問我自己的一個無知。我搜索了一個現有的等價物但找不到一個;如果這是重複的,我很抱歉。C++到C#的包裝 - 如何處理來自C#的雙指針數組
我試圖從.NET 4.0框架下的Visual C#Winforms應用程序使用非託管Windows DLL(英特爾電源小工具3.0 API,FWIW)。這個API是在C++實現的基礎上編寫的,所以我不得不隨時翻譯。我已經能夠來包裝和實施最圖書館的功能,但我通過這一個狼狽不堪:
bool GetPowerData(int iNode, int iMSR, double *pResult, int *nResult);
...這是由作家這樣(我的重點)描述:
將最近一次調用收集到的數據返回給ReadSample()。 返回的數據用於由iNode指定的MSR指定的包中的數據, 。 數據在pResult中返回, 在 nResult中返回pResult中返回的雙重結果的數量。請參閱表1:MSR功能。
(https://software.intel.com/en-us/blogs/2014/01/07/using-the-intel-power-gadget-30-api-on-windows)
關鍵點:功能中的指針double數組的形式返回其主數據 - 或者是指針double數組? ...什麼程度的間接?這就是我開始不確定的地方! :)
至少一些的輸入參數很簡單; iNode和iMSR是int
s,這是我知道並已經可以獲得的價值。
我已經聲明與此簽名在我的C#代碼的功能:
[DllImport("EnergyLib32.dll", CallingConvention = CallingConvention.Cdecl)]
static extern bool GetPowerData(int iNode, int iMSR, out IntPtr pResult, ref int nResult);
(我敢肯定,這是我的第一個錯誤,就在那裏)
至於實際調用的函數,我已經嘗試了各種可能性,甚至在這裏都顯得很醜。
能否有人比我的知識更多請提出處理此函數及其返回值的最佳方法?
預先感謝您。
指針和數組在C++中幾乎是相同的。這就是爲什麼雙精度數組返回爲double *的原因。看看http://www.cplusplus.com/doc/tutorial/pointers/#arrays。 – rsenna 2014-11-06 18:51:55
感謝rsenna爲您的快速和有益的迴應。你鏈接到的文章是我見過的C++中更好的數組解釋之一。不幸的是,你認爲我比這更容易理解,事實上 - 我會繼續研究:) – 2014-11-06 20:15:37
不客氣! :)那是我當時可以提供的最好的,希望它有所幫助。 – rsenna 2014-11-07 15:38:58