簡體   English   中英

P /調用語法-我可以在C#中正確翻譯我的C ++函數嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM