2012-06-19 66 views
5

我在C++ void someFunc(char* arg1, int* arg2)的功能,我想我在C#中使用此功能(導入DLL後)當元帥的參數..編組INT *到C#

你能請告訴我,我應該如何馬歇爾,因爲我在這裏感到困惑。

[DllImport(Dllname)] 
extern void someFunc([MarshallAsAttribute(UnmanagedType,LPStr)] string arg1, IntPtr arg2); 

我應該在這裏使用一個IntPtr嗎?我不能通過從C#中的任何int變量的地址,以便它將落在C++中的指針?

+0

實際上,您可以在C#中使用原生指針,並使用不安全的代碼塊。雖然我不會推薦它,因爲它導致了一個不直觀的API。 –

+1

您需要描述這些指針的含義。特別是它們指向了多少數據,如果函數在返回後保留指針,並且您想要將'null'傳遞給它們。 – CodesInChaos

回答

7

問題是int*可用於C中的很多不同場景。您如何編組取決於int* arg2的意義。

例如,如果它只是設置int的值,則可以將其編組爲ref int。但是,如果int*表示一個數組,那麼您需要傳遞一個數組(這不太可能,但是,由於沒有長度術語,這在通過指針使用數組時很常見)。

+0

而'char *'更加模糊。 – CodesInChaos

+0

@CodeInChaos是 - 任何指針類型都有這個問題。你總是需要知道本地方計劃如何處理這個變量。 –