我有一个第三方库,他们的 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
,但我不确定在结构的情况下会是什么样子。
在输入我的问题时,我想我想出了如何使用 stackalloc 来获得我需要的东西
unsafe
{
var dataPointer = stackalloc byte[sizeof(DataStruct)];
var error = Wrapper.GetData(dataPointer);
var data = (DataStruct*)dataPointer;
Console.WriteLine(data->SomeProperty);
}
不确定是否有更好的方法来处理这个问题。