我正在从 C# 调用本机 dll。对于有问题的特定函数,我需要的参数之一是一个包含双重间接字段(指向指针的指针)的结构。
例如,采用以下 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,然后使用不安全代码为其分配适当的值。这是一种有效的方法,还有其他/更好的选择吗?