-
Notifications
You must be signed in to change notification settings - Fork 3
Open
Labels
Description
- 構造体をbyte配列にして渡す
Structs.cs
[MarshalAs(UnmanagedType.ByValArray,SizeConst=224)]
internal byte[] minimum_phase;
[MarshalAs(UnmanagedType.ByValArray,SizeConst=120)]
internal byte[] inverse_real_fft;
[MarshalAs(UnmanagedType.ByValArray,SizeConst=120)]
internal byte[] forward_real_fft;
Core.cs
var forward_fft = new ForwardRealFFT();
synth.forward_real_fft = new byte[Marshal.SizeOf<ForwardRealFFT>()];
GCHandle gch = GCHandle.Alloc(synth.forward_real_fft, GCHandleType.Pinned);
Marshal.StructureToPtr(forward_fft, gch.AddrOfPinnedObject(), false);
gch.Free();
// 同様に
Structs.cs を IntPtr にして,確保した構造体を StructureToPtr でコピーしても同様?
- 構造体をクラス定義にして渡す
Structs.cs
[StructLayout(LayoutKind.Sequential)]
public class WorldSynthesizer
{
//
internal MinimumPhaseAnalysis minimum_phase;
//
}
[StructLayout(LayoutKind.Sequential)]
internal class MinimumPhaseAnalysis
{
//
}
Core.cs
synth.minimum_phase = new MinimumPhaseAnalysis();
//
- World自体の実装を変えてメモリ管理を全て任せる
Structs.cs
internal IntPtr minimum_phase;
//
World の WorldSynthesizer 構造体の FFT 関連をポインタにして,World 側で確保するのが一番楽
構造体の中身見なくていいなら型宣言すら不要