我有一个 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();
这是我的斑点:
[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
我得到了错误的值,如果有人可以帮助我,那就太好了,我说的是 Marshal 的使用......我认为我做错了。