【发布时间】:2015-07-09 12:05:30
【问题描述】:
我需要将包含音频流的缓冲区从 C# 传递到本机 dll。缓冲区驻留在结构中。希望缓冲区将通过接口而不是通过磁盘路径传递。我见过这种方法:
// native
struct MyStruct
{
short* buffer
}
void Foo(MyStruct *myStruct);
// managed
[StructLayout(LayoutKind.Sequential)]
public struct MyStruct
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst=1000)]
public short[] buffer;
}
[DllImport("My.dll")]
public static extern void Foo(ref MyStruct myStruct);
第一个问题是此代码对于大小高达 1K 短裤的 short* 缓冲区是否正确?
其次,size是预先未知的:我需要在SizeConst中设置最大大小(可能是几个MB)吗?
【问题讨论】: