我在C++ native dll中有以下功能,我想在C#應用程序中使用它。Pinvoke中的一個問題
DWORD __cdecl Foo(
LPCTSTR Input,
TCHAR** Output,
DWORD Options,
ErroneousWord** List = NULL,
LPDWORD Count = 0
);
使用的PInvoke
[DllImport("dllName", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
public static extern UInt32 Foo(string InputWord, out string Output, UInt32 Options, out object List,out UInt32 Count);
調用代碼:
string output;
object dummyError = null;
uint dummyCount = 0;
uint x = 0;
Foo(Text, out output, x | y,out dummyError,out dummyCount);
我得到了以下異常
試圖讀取或寫入受保護的內存 。這往往是一個跡象 其他內存已損壞
PS: ErroneousWord是結構,我並不需要它的輸出,所以我名帥它作爲對象
什麼是'ErroneousWord'?不管它是什麼,我都無法想象它可以編組成C#對象。那麼'Output'參數呢?什麼是協議的marhsalling呢? – 2011-05-16 14:21:07
輸出是從本機代碼創建的,並且有暴露的函數來釋放它,所以本機代碼分配輸出並公開一個函數以釋放它。 – 2011-05-16 14:31:16
我認爲對於輸出,您將需要使用'Marshal.PtrToStructure'。我對「錯誤的詞」不太樂觀。 – 2011-05-16 14:32:28