有人可以帮我解决以下问题吗?
以下结构,当返回的应用程序崩溃时
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
来获取数组的每个元素。
size
和 used
参数声明为 UIntPtr
,因为 size_t
是 32 位或 64 位,具体取决于机器架构。
通过参数返回数组会容易得多。并让调用者分配内存。然后编码器可以为您完成这项工作。
关于c# - 从 C 函数返回结构,C# 中的等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28024706/