0

我在 CLI 中有这段代码

List<Codec^> ^GetCodecs()
{
    List<Codec^> ^l = gcnew List<Codec^>;


    bool KeepLooping = Encoder_MoveToFirstCodec();
    while (KeepLooping)
    {
        Codec ^codec = gcnew Codec(); // here... and that call encoder_init many times... which call register codec many times... which is a mass...

        codec->Name = gcnew String(Encoder_GetCurrentCodecName());
        codec->Type = Encoder_GetCurrentCodecType();

        char pix_fmts[200]; // array of 200 is probably enough
        int actual_pix_fmts_sz  = Encoder_GetCurrentCodecPixFmts( pix_fmts , 200 );

        for (int i = 0 ; i < actual_pix_fmts_sz ; i++)
        {
            //copy from pix_fmts to the :List

            codec->SupportedPixelFormats->Add(pix_fmts[i]);

        }

这是 C 语言中的 Encoder_GetCurrentCodecPixFmts 函数:

int Encoder_GetCurrentCodecPixFmts( char *outbuf , int buf_sz )
{
  int i=0;
    while ( (i<buf_sz) && (codec->pix_fmts[i]!=-1) )
    {
        outbuf[i] = codec->pix_fmts[i];
        i++;
    }
    return i;
}

这是我做的一门新课:

#pragma once

using namespace System;
using namespace System::Collections::Generic;

public ref class Codec
{
public:
    String^ Name;
    int ID; // this is the index
    int Type; // this is the type
    List<int> ^SupportedPixelFormats;


    Codec(void)
    {
        SupportedPixelFormats = gcnew List<int>;
        // do nothing in the constructor;
    }

};

其中还包含: SupportedPixelFormats 这个新类中的构造函数应该是空的,但我需要在某个地方为列表创建一个实例,为列表创建一个新的。

现在在 C++ 中,我需要从 pix_fmts char 数组传输到编解码器->支持或从 pix_fmts 复制到 :List

所以我按照上面的方法做了:

codec->SupportedPixelFormats->Add(pix_fmts[i]);

但我不确定这是否是复制的含义。

我做的对吗?

4

1 回答 1

1

它有效,它是一种深拷贝。是什么让你认为它不起作用?结果会不会出错?如果他们这样做,请在其中放置一个断点并尝试找出问题所在。

Enumerable::ToList也许您可以使用扩展方法,而不是一一复制。

我希望这对你有所帮助。

于 2013-05-09T21:19:23.470 回答