我有一个包含函数的dll,该函数返回一个带有字节的结构,以及一个7个双精度数组:
public struct myStruct
{
public byte v1;
public Blob v2;
}
dll函数:
[DllImport("myDLL", EntryPoint = "?myDLLFuntion@@YA?AUmyStruct@@XZ", ExactSpelling = true)]
public static extern MyStruct myDLLFunction();
这是我的blob:
[StructLayout(LayoutKind.Sequential, Size = ((sizeof(double))*7))]
public struct Blob
{
// Intentionally left empty. It's just a blob
}
我创建了一个获取数组的函数:
public double[] GetArray(Blob NameBlob)
{
IntPtr dPtr = IntPtr.Zero;
try
{
dPtr = Marshal.AllocHGlobal(((sizeof(double))*7));
Marshal.StructureToPtr(NameBlob, dPtr, false);
double[] r = new double[((sizeof(double))*7)];
Marshal.Copy(dPtr, r, 0, ((sizeof(double))*7));
return r;
}
finally
{
if (dPtr != IntPtr.Zero)
{
Marshal.FreeHGlobal(dPtr);
}
}
}
我这样称呼它:
myStruct s1=myDLLFunction();
GetArray(s1.v2)[0]; // print it
我得到错误的价值,如果有人可以帮助我,那将是伟大的,我说明使用元帅......我认为我做错了。
答案 0 :(得分:1)
正如Hans Passant所指出的那样,StructureToPtr()
在结构没有任何字段时不会做任何事情。我想我们正在谈论这个:
[StructLayout(LayoutKind.Sequential)]
public struct Blob
{
[MarshalAs (UnmanagedType.ByValArray, SizeConst = 7)]
double[] array;
}