我需要一个 .net 结构(它模仿连接的设备内部映射)并且我想使用 try catch 块,因为我正在使用 Marshall.PtrToStructure() 和相关的 GChandle 东西。但是,当我将结构字段分配放在 try catch 块中时,我收到此错误“在将控制权返回给发送者之前必须完全分配字段 1”。没有 try catch 块,基本代码可以正常工作。使用 try catch 块时有什么方法可以解决这个错误吗?我应该使用try catch吗?
[StructLayout( LayoutKind.Sequential )]
public struct Effects
{
public UInt16 field_1;
public UInt16 field_2;
...
public Effects(byte[] effectsData)
{
GCHandle gch;
try
{
gch = GCHandle.Alloc( effectsData, GCHandleType.Pinned );
IntPtr pEffects = gch.AddrOfPinnedObject( );
this = (Effects)Marshal.PtrToStructure( pEffects, typeof(Effects ) );
}
catch (Exception ex)
{
}
finally
{
if (gch.IsAllocated)
gch.Free( );
}
}
}