如何将数据从 C++ 库提取到 C# 中的结构指针

问题描述 投票:0回答:1

我有一个第三方库,他们的 C# 包装器只是他们 C++ 库中

DLLImport
的最小列表。我正在尝试使用一种方法来传递这样的数据

public static extern ErrorResult GetData(void* pData)

我知道数据是一个结构,他们确实为结构提供了

StructLayout
属性,使其在大小上明确,类似于下面

[StructLayout(LayoutKind.Explicit, Size = 120)]
unsafe public struct DataStruct
{
    //stuff
}

我正在尝试这样做

unsafe
{
    DataStruct* data;
    var error = Wrapper.GetData(data);
}

但是这个错误说数据未分配

CS0165 use of unassigned local variable 'data'

我尝试初始化数据,我发现了这个问题,但答案只是说不要在 C# 中这样做,但我无法控制我正在使用的第三方 API,需要提取数据他们是如何设置的,文档和示例很少。

关于这个问题的其他人建议

stackalloc
,但我不确定在结构的情况下会是什么样子。

c# c++ pointers struct interop
1个回答
0
投票

在输入我的问题时,我想我想出了如何使用 stackalloc 来获得我需要的东西

unsafe
{
    var dataPointer = stackalloc byte[sizeof(DataStruct)];
    var error = Wrapper.GetData(dataPointer);
    var data = (DataStruct*)dataPointer;
    Console.WriteLine(data->SomeProperty);
}

不确定是否有更好的方法来处理这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.