![](/img/trans.png)
[英]C# pass pointer to struct (containing non-blittable types) to unmanaged C++ DLL
[英]How to get a pointer to a C# non-blittable ref struct
我正在尝试通过 pinvoke 将指向“ref Struct”的指针传递给一些 C++ 代码,以便可以通过委托回调将其传递回 C#(然后转换回 ref)以避免发生默认封送处理因为该结构是不可 blittable (请参阅我的另一个问题如何使用 SWIG 将带有 ref struct 参数的 C# 委托(回调)传递给 C++ )
我可以使用 Unsafe.AsPointer 获得指向包含非 blittable 字段的普通结构的指针。 但是,这不会为 ref 结构编译 (CS0306),如下面的代码所示:
public struct NormalStruct
{
public int value;
public string text;
}
public ref struct RefStruct
{
public int value;
public string text;
}
NormalStruct ns = new NormalStruct() { value = 42 };
RefStruct rs = new RefStruct() { value = 42 };
// This works
void* nsPtr = Unsafe.AsPointer(ref ns);
// This won't compile with CS0306;
void* rsPtr = Unsafe.AsPointer(ref rs);
是否有办法获得指向 ref 结构的指针 - 或更改类型的默认封送处理
我为此苦苦挣扎了一会儿,但是对于以后发现此问题的任何人,我都可以使用它来使其工作。
public void Method(ref MyStruct refStruct)
{
fixed (MyStruct* structPointer = &refStruct)
{
// do something with ref struct here
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.