.net構造(接続されたデバイスの内部マップを模倣)が必要であり、Marshall.PtrToStructure()および関連するGChandleのものを使用しているため、trycatchブロックを使用したいと思います。ただし、構造体のフィールド割り当てをtry catchブロック内に配置すると、「制御が送信者に返される前に、field1を完全に割り当てる必要があります」というエラーが発生します。基本的なコードは、trycatchブロックがなくても正常に機能します。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( );
}
}
}