有人可以在以下方面帮助我吗?
按照结构,返回的应用程序崩溃时
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位,具体取决于计算机体系结构。通过参数返回数组要容易得多。并让调用者分配内存。然后,编组者可以为您完成工作。