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