c# - 从 C 函数返回结构,C# 中的等价物是什么?

标签 c# c struct interop dllimport

有人可以帮我解决以下问题吗?

以下结构,当返回的应用程序崩溃时

typedef struct
{
    MY_INFO *array;
    size_t used;
   size_t size;
} MY_INFO_ARRAY;

方法签名 MY_INFO_ARRAY WINAPI FInfoAll(char *p)

我已经使用 C++ 代码对其进行了测试,工作正常,现在尝试使用 C# 调用相同的方法,但返回时 dll 似乎崩溃了

我编写了以下C#实现来接收结构,并且DLL导入功能已完成

接收上述结构的新类。

public class MyInformationArray 
{
    public Int32 Count { get; internal set; }


    public Int32 Size { get; internal set; }

    public MY_INFO[] { get; internal set; }


}

调用方式如下

MyInformationArray minfo = FInfoAll(".");

最佳答案

你的结构翻译是错误的。您还需要手动整理数组。并且您需要处理数组的释放。我想非托管代码需要这样做,但这取决于它的分配方式。

结构应该是

[StructLayout(LayoutKind.Sequential)]
public struct MY_INFO_ARRAY
{
    public IntPtr array;
    public UIntPtr used;
    public UIntPtr size;
}

一旦获得这些元素,您就需要调用Marshal.PtrToStructure来获取数组的每个元素。

sizeused 参数声明为 UIntPtr,因为 size_t 是 32 位或 64 位,具体取决于机器架构。

通过参数返回数组会容易得多。并让调用者分配内存。然后编码器可以为您完成这项工作。

关于c# - 从 C 函数返回结构,C# 中的等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28024706/

相关文章:

c# - 如何从列表框中保存文本?

c# - 禁用鼠标光标(Windows 7/10)

c# - 单击后退按钮时,注销后页面仍显示 asp.net mvc 3

c# - 类型字符串是预期的,但收到了一个值为 0 的整数类型

c - 使用 C99 编译时出现 'ISO C90' 错误,不允许 VLA

c - 从函数返回指向结构的指针

c - 如何从函数中取回指针的指针

c - 如何理解数组中的this指针?

C 中节俭的编码示例,使用文件

c - 如何找到结构的大小?