C++;到C#:字节指针数组与3个元素的等价物是什么

C++;到C#:字节指针数组与3个元素的等价物是什么,c#,c++,pinvoke,dllimport,C#,C++,Pinvoke,Dllimport,我有C语言的代码++ BYTE * apData[3] 如何将其转换为C#?(我正在使用DllImport)只需使用字节[]: [DllImport EntryPoint="myfunc"] public extern static void MyFunc(byte[]); byte[] apData = new byte[3]; MyFunc(apData); 只需使用DLLImport,如下所示 [DllImport EntryPoint="func"] public extern s

我有C语言的代码++

BYTE * apData[3]

如何将其转换为C#?(我正在使用DllImport)

只需使用
字节[]

[DllImport EntryPoint="myfunc"]
public extern static void MyFunc(byte[]);

byte[] apData = new byte[3];
MyFunc(apData);

只需使用DLLImport,如下所示

[DllImport EntryPoint="func"]
public extern static void Func(byte[]);
byte[] apData = new byte[3];

您可以使用原始指针

[System.Runtime.InteropServices.DllImportAttribute("<Unknown>", EntryPoint="fun")]
public static extern void fun(System.IntPtr byte_array) ;
[System.Runtime.InteropServices.DllImportAttribute(“,EntryPoint=“fun”)]
公共静态外部无效(System.IntPtr字节数组);

这是一个长度为3的数组,指针指向
字节

假设它出现在结构中,则声明如下:

[MarshalAs(UnmanagedType.ByValArray, SizeConst=3)]
IntPtr[] apData;
[MarshalAs(UnmanagedType.LPArray, SizeConst=3)]
IntPtr[] apData
或者,如果数组作为参数传递,则按如下方式声明该参数:

[MarshalAs(UnmanagedType.ByValArray, SizeConst=3)]
IntPtr[] apData;
[MarshalAs(UnmanagedType.LPArray, SizeConst=3)]
IntPtr[] apData

你使用的是DLimPult-如何?问题的论点似乎是一组指向<代码>字节<代码>的指针,而不是一个代码< >字节> /Cux> s的数组,它的价值(它针对C,而不是C++,但我不认为它在这里有什么不同),翻译<代码>无符号char * AdDATA(3)
into
将apData声明为指向无符号字符的指针数组3
。肯定看起来像是指向字节数组的指针,而不是指向一个字节数组的指针。如果在32位C++程序中声明“代码>字节*APDATATEATION[3 ] ,然后检查<代码> siZeof(ApDATA)< /C> > 12,因为它是一组3字节指针,不是一个3字节的数组。你们都是对的-我把它误读为一个作业。为了未来读者的利益,这个答案,虽然目前被接受,但正如上面的评论所讨论的,显然是错误的。