我有一个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
我得到了错误的值,请如果有人能帮助我,那将是伟大的,我正在声明使用元帅…我觉得我做错了。
正如Hans Passant指出的那样,当结构体没有任何字段时,StructureToPtr()
不会做任何事情。我想我们正在讨论这个:
[StructLayout(LayoutKind.Sequential)]
public struct Blob
{
[MarshalAs (UnmanagedType.ByValArray, SizeConst = 7)]
double[] array;
}