structの配列への参照をとり、操作が成功するかどうかを判断するバイトを返す(.dll)ファイルのc関数を使用します。 これはCプロジェクト でうまく動作し、小さなサイズの配列(最大7要素)を送信するとうまくいきました。 とそれ以降は偽です!マーシャリング中の大きなサイズの配列
配列は、あなたがあなたの構造体の8つのバイトをハードコードされているようだ次のstruct
[StructLayout(LayoutKind.Sequential)]
public struct MainStruct
{
[MarshalAsAttribute(UnmanagedType.Struct, SizeConst = 5)]
public Struct2 Struct2Object;
[MarshalAsAttribute(UnmanagedType.U8, SizeConst = 1)]
public UInt64 Elem1;
[MarshalAsAttribute(UnmanagedType.U8, SizeConst = 1)]
public UInt64 Elem2;
[MarshalAsAttribute(UnmanagedType.U8, SizeConst = 1)]
public UInt64 Elem3;
[MarshalAsAttribute(UnmanagedType.U8, SizeConst = 1)]
public UInt64 Elem4;
[MarshalAsAttribute(UnmanagedType.U8, SizeConst = 1)]
public UInt64 Elem5;
[MarshalAsAttribute(UnmanagedType.U8, SizeConst = 1)]
public UInt64 Elem6;
[MarshalAsAttribute(UnmanagedType.U8, SizeConst = 1)]
public UInt64 Elem7;
[MarshalAsAttribute(UnmanagedType.U8, SizeConst = 1)]
public UInt64 Elem8;
};
関数のネイティブ定義はどのように見えますか?C#でどのように定義しましたか?ネイティブ関数をデバッグして偽を返すことができますか? – svick
また、 'struct'を埋め込み配列でマーシャリングしたい場合は、配列にSeveraの代わりに' UnamanagedType.ByValArray'を使用できますlフィールド。別の質問:ネイティブ関数が配列の大きさをどのように見つけ出すのでしょうか? – svick
あなたはSizeConstで横たわりをやめなければなりません。 UInt64が1バイトしか持てない場所を考えることはできません。 –