gpt4 book ai didi

c# - 在 C# 中将结构数组编码到指针

转载 作者:行者123 更新时间:2023-12-02 14:57:40 24 4
gpt4 key购买 nike

我正在尝试调用一个如下所示的非托管函数(DATA 是我的 C# 结构):

[DllImport("data.dll")]
internal static unsafe extern int MyExternalFunction(DATA* pData, uint numElements);

这就是我从 C# 调用该函数的方式:

DATA[] data = new DATA[64];
fixed (DATA* pData = data )
{
MyExternalFunction(pData, 64);
}

[StructLayout(LayoutKind.Sequential)]
internal struct DATA
{
internal uint a;
internal uint b;
internal uint c;
internal POINT pos;
}

[StructLayout(LayoutKind.Sequential)]
internal struct POINT
{
internal int x;
internal int y;
}

不幸的是,我收到此错误:“无法编码(marshal)'参数#1':指针无法引用编码(marshal)结构。”

如果有什么区别的话,我的 DATA 结构内部有嵌套结构。我无法控制这个外部方法的设计方式。调用此函数并接收结构数组的正确方法是什么?

最佳答案

你应该这样声明:

[DllImport("data.dll")]
public static extern int MyExternalFunction(
[MarshalAs(UnmanagedType.LPArray, SizeParamIndex=1)]
DATA[] Data,
uint numElements
);

并这样调用它:

MyExternalFunction(myArray, myArray.Length);

不需要不安全或固定。请删除所有这些。

关于c# - 在 C# 中将结构数组编码到指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7363821/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com