[英]P/Invoke syntax - Am I translating my C++ function correctly in C#?
快速免責聲明:我對P / Invoke還是陌生的,所以如果這是一個愚蠢的問題,我會提前道歉。
這是我在C ++中的函數簽名:
HRESULT SomeFunction(
_Out_ unsigned long *count,
_Outptr_result_buffer_(*count) GUID **ids,
_In_ const PCWSTR filter
)
我試圖在C#中像這樣P /調用它:
[StructLayout(LayoutKind.Sequential)]
struct GUID
{
public int a;
public short b;
public short c;
[MarshalAs(UnmanagedType.ByValArray, SizeConst=8)]
public byte[] d;
}
[DllImport("MyDll.dll", EntryPoint="SomeFunction")]
[return: MarshalAs(UnmanagedType.I8)]
private static extern Int64 SomeFunction
(
out ulong count,
[MarshalAs(UnmanagedType.LPArray)]
out GUID[] ids,
string filter
);
我知道我的代碼到達了C ++函數(我可以在windbg中看到它)並且沒有崩潰,但是據我所知,參數沒有正確傳遞。 我的猜測是我搞砸了C#中的P / Invoke翻譯,但是我不知道如何解決這個問題。 任何幫助,將不勝感激!
看起來我找到了解決方案...
[DllImport("MyDll.dll", EntryPoint="SomeFunction")]
[return: MarshalAs(UnmanagedType.I4)]
private static extern int SomeFunction
(
out uint count,
[MarshalAs(UnmanagedType.LPArray)]
out GUID[] ids,
[InAttribute()]
[MarshalAsAttribute(UnmanagedType.LPWStr)]
string filter
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.