繁体   English   中英

如何获取指向 C# 非 blittable ref 结构的指针

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM