我想編組一個帶有可變長度數組的C結構回C#但到目前爲止,我不能得到比指針結構表示和指針更好的東西浮。編組包含一個可變長度數組的C結構
非託管表示:
typedef float smpl_t;
typedef struct {
uint_t length; /**< length of buffer */
smpl_t *data; /**< data vector of length ::fvec_t.length */
} fvec_t;
託管表示:
[StructLayout(LayoutKind.Sequential)]
public unsafe struct fvec_t1
{
public uint length;
public float* data;
}
[DllImport("libaubio-4.dll", EntryPoint = "new_fvec", PreserveSig = true, CharSet = CharSet.Ansi,
CallingConvention = CallingConvention.Cdecl)]
public static extern unsafe fvec_t1* new_fvec1(uint length);
我想什麼是有一個.NET風格數組,其中data
將float[]
但如果我不改變結構來下面的表格確實得到了在上面的外部函數中,無法獲取受管理類型的地址,獲取大小或聲明指針。
[StructLayout(LayoutKind.Sequential)]
public unsafe struct fvec_t1
{
public uint length;
public float[] data;
}
Apparently,涉及一種具有編組背面的可變長度數組原來的樣子,這是正確的或者是它還有一個方法來實現這一點是不可能的?
您可以輕鬆地將數組作爲參數傳遞。任何你不這樣做的理由?你爲什麼使用'unsafe'? –
你能詳細說明一下嗎?事情是當我指定MarshalAs.Struct調用的作品,但返回的結構是垃圾(長度不正確),所以我想它不能正常工作。所以現在,唯一的工作是返回一個struct指針並手動訪問'data'中的項。關於不安全的聲明,我只是忘了刪除它。 – Aybe
你不能在一個結構體內部有數組,並讓編組員完成這項工作。但是你可以將數組作爲指針傳遞並編組。 –