有人可以在以下方面帮助我吗?

按照结构,返回的应用程序崩溃时

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位,具体取决于计算机体系结构。

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

10-06 10:22
查看更多