![](/img/trans.png)
[英]How to get unmanaged variable-length C-array within a struct from C to C#?
[英]How to marshal this nested, variable-length C structure in C#
typedef struct pt_bir {
PT_BIR_HEADER Header;
BYTE Data[1]; //variable length based on pt_bir_header.Length
} PT_BIR
typedef struct pt_bir_header {
DWORD Length;
BYTE HeaderVersion;
BYTE Type;
WORD FormatOwner;
WORD FormatID;
CHAR Quality;
BYTE Purpose;
DWORD FactorsMask;
} PT_BIR_HEADER
我的C函數是:
PT_STATUS LoadFinger (
IN PT_CONNECTION hConnection,
IN PT_LONG lSlotNr,
IN PT_BOOL boReturnPayload,
OUT PT_BIR **ppStoredTemplate
)
現在,我需要為C#中的上述C函數做包裝。
返回該函數后,應如何PT_BIR**
結構,以及如何將其PT_BIR**
送?
請幫我 ...
您將需要手動將其解組。 首先在C#中聲明標頭結構
[StructLayout(LayoutKind.Sequential)]
public struct PT_BIR_HEADER
{
public int Length;
public byte HeaderVersion;
public byte Type;
public ushort FormatOwner;
public ushort FormatID;
public char Quality;
public byte Purpose;
public uint FactorsMask;
}
然后為函數聲明聲明ppStoredTemplate
參數,如下所示:
out IntPtr ppStoredTemplate
函數返回后,您有了ppStoredTemplate
,便可以將其解組。 首先拉出標題:
PT_BIR_HEADER header = (PT_BIR_HEADER)Marshal.PtrToStructure(ppStoredTemplate,
typeof(PT_BIR_HEADER));
然后您可以解壓縮數據:
byte[] data = new byte[header.Length];
Marshal.Copy(ppStoredTemplate + Marshal.SizeOf(typeof(PT_BIR_HEADER)), data, 0,
header.Length);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.