C++中这样一个语句 :
typedef struct VIDEOCOMPRESSORINFO
{
char szName[80];
DWORD dwHandle;
} VideoCompressorInfo;
这是不是一个结构体的数组形式?因为在
VideoCompressorInfo * pInfo;
int num;
HRESULT hr = DSStream_EnumVideoCompressor(NULL, &num);
if(SUCCEEDED(hr) && num>0)
{
pInfo = new VideoCompressorInfo[num];
if(pInfo)
{
hr = DSStream_EnumVideoCompressor(pInfo, &num);
程序中,VideoCompressorInfo类型的pInfo被赋值成了一个数组形式的,那么DSStream_EnumVideoCompressor(pInfo, &num)中pInfo也可定是个VideoCompressorInfo的数组形式了?
如果把这段代码改成c#
如何写VideoCompressorInfo这个结构体,要求用VideoCompressorInfo声明一个exInfo,exInfo能作为一个数组形式传入
DSStream_EnumVideoCompressor函数
typedef struct VIDEOCOMPRESSORINFO
{
char szName[80];
DWORD dwHandle;
} VideoCompressorInfo;
这是不是一个结构体的数组形式?因为在
VideoCompressorInfo * pInfo;
int num;
HRESULT hr = DSStream_EnumVideoCompressor(NULL, &num);
if(SUCCEEDED(hr) && num>0)
{
pInfo = new VideoCompressorInfo[num];
if(pInfo)
{
hr = DSStream_EnumVideoCompressor(pInfo, &num);
程序中,VideoCompressorInfo类型的pInfo被赋值成了一个数组形式的,那么DSStream_EnumVideoCompressor(pInfo, &num)中pInfo也可定是个VideoCompressorInfo的数组形式了?
如果把这段代码改成c#
如何写VideoCompressorInfo这个结构体,要求用VideoCompressorInfo声明一个exInfo,exInfo能作为一个数组形式传入
DSStream_EnumVideoCompressor函数
public struct VideoCompressorInfo
{
[MarshalAs(UnmanagedType.ByValArray,SizeConst=80)]
public byte[] szName; public uint dwHandle;
} int num;
IntPtr exInfo=IntPtr.Zero;int hr = DSStream_EnumVideoCompressor(null, &num);
if(hr>0 && num>0)
{
exInfo= Marshal.AllocHGlobal(Marshal.SizeOf(typeof(VideoCompressorInfo)*num);
hr = DSStream_EnumVideoCompressor(exInfo, &num);VideoCompressorInfo[] vi=new VideoCompressorInfo[num-1]
for (int i = 0; i < vi.Length; i++)
{
vi[i] = (VideoCompressorInfo)Marshal.PtrToStructure((IntPtr)((UInt32)pt + i * Marshal.SizeOf(typeof(VideoCompressorInfo))), typeof(VideoCompressorInfo));
}
}
vi是VideoCompressorInfo的一个结构体数组,就是你要的结果
<<C#入门经典>>
上面讲了结构体
HRESULT DSStream_EnumVideoCompressor(VideoCompressorInfo * pInfo, int * piVidCompNum);
这个函数是用来获得系统内压缩算法的信息的,如果pInfo为null,则piVidCompNum放回算法数目,否则返回一个VideoCompressor,其中含有名称szName和句柄dwHandle,我这个程序主要就是为了获得dwHandle