1

C# からネイティブ dll を呼び出しています。問題の特定の関数について、必要なパラメーターの 1 つは、二重間接フィールド (ポインターへのポインター) を含む構造体です。

たとえば、次の C プロトタイプと構造体を取り上げます。

int someFunc(SomeStruct* result);

struct SomeStruct
{
     DWORD foo;
     AnotherStruct** ppResultStruct;
}

struct AnotherStruct
{
     DWORD bar;
}

次の C# コードは、AnotherStruct フィールドに対して単一レベルの間接化のみを提供しますが、これは正しくありません。

[DllImport("my.dll")]
public static extern int someFunc(SomeClass result);

[StructLayout(LayoutKind.Sequential)
public class SomeClass
{
    int foo;
    AnotherClass resultClass;
}

[StructLayout(LayoutKind.Sequential)]
public class AnotherClass
{
    int bar;
}

ここで必要な二重間接化を実現するにはどうすればよいですか? 関数への二重間接パラメーターの場合の方法は知っていますが、構造体に埋め込まれているという事実に混乱しています。

AnotherClass フィールドを IntPtr として宣言してから、アンセーフ コードを使用して適切な値を割り当てる必要があるかもしれません。それは有効なアプローチですか?他に/より良いオプションはありますか?

4

1 に答える 1