簡単な免責事項:私はP / Invokeを初めて使用するので、これがばかげた質問である場合は事前に謝罪します。
これがC++での私の関数シグネチャです:
HRESULT SomeFunction(
_Out_ unsigned long *count,
_Outptr_result_buffer_(*count) GUID **ids,
_In_ const PCWSTR filter
)
そして、私はそれをC#でP /Invokeしようとしています:
[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の翻訳を台無しにしたと思いますが、これを修正する方法がわかりません。どんな助けでもいただければ幸いです!