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函数

解决方案 »

  1.   

    C++中pInfo是一个指向VideoCompressorInfo结构体的指针。[StructLayout(LayoutKind.Sequential)] 
        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的一个结构体数组,就是你要的结果 
      

  2.   

    推荐一本书
    <<C#入门经典>>
    上面讲了结构体                                        
      

  3.   

    C++中
    HRESULT DSStream_EnumVideoCompressor(VideoCompressorInfo * pInfo, int * piVidCompNum);
    这个函数是用来获得系统内压缩算法的信息的,如果pInfo为null,则piVidCompNum放回算法数目,否则返回一个VideoCompressor,其中含有名称szName和句柄dwHandle,我这个程序主要就是为了获得dwHandle
      

  4.   

    C++是先得到算法数目,就知道有多少个VideoCompressor了,你在调用一次就得到了所有的VideoCompressor的内容了啊