导入c++ dll,返回一个双精度数组结构体

本文关键字:一个 双精度 数组 结构体 dll c++ 返回 导入 | 更新日期: 2023-09-27 17:49:26

我有一个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

我得到了错误的值,请如果有人能帮助我,那将是伟大的,我正在声明使用元帅…我觉得我做错了。

导入c++ dll,返回一个双精度数组结构体

正如Hans Passant指出的那样,当结构体没有任何字段时,StructureToPtr()不会做任何事情。我想我们正在讨论这个:

[StructLayout(LayoutKind.Sequential)]
public struct Blob
{
    [MarshalAs (UnmanagedType.ByValArray, SizeConst = 7)]
    double[] array;
}