Ung*_*lad 6 c# arrays interop struct marshalling
我在C#中有以下结构
unsafe public struct control
{
public int bSetComPort;
public int iComPortIndex;
public int iBaudRate;
public int iManufactoryID;
public byte btAddressOfCamera;
public int iCameraParam;
public byte PresetNum;
public byte PresetWaitTime;
public byte Group;
public byte AutoCruiseStatus;
public byte Channel;
public fixed byte Data[64];
}
Run Code Online (Sandbox Code Playgroud)
我用来将它转换为字节数组[]的函数是
static byte[] structtobyte(object obj)
{
int len = Marshal.SizeOf(obj);
byte[] arr = new byte[len];
IntPtr ptr = Marshal.AllocHGlobal(len);
Marshal.StructureToPtr(obj, ptr, true);
Marshal.Copy(ptr, arr, 0, len);
Marshal.FreeHGlobal(ptr);
return arr;
}
Run Code Online (Sandbox Code Playgroud)
当我编译它给
Type 'System.Byte[]' cannot be marshaled as an unmanaged structure; no meaningful size or offset can be computed.
Run Code Online (Sandbox Code Playgroud)
可能是什么问题?提前致谢!
您报告为编译错误的错误实际上是运行时错误( )ArgumentException。当您想要使用structtobyte将 a 转换control为时byte[],您应该向该方法传递对 的引用control,而不是byte数组 ( byte[])。
control ctrl = new control();
byte[] bytes = structtobyte(ctrl);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3822 次 |
| 最近记录: |