我在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 这个新类中的构造函数应该是空的,但我需要在某个地方为List创建一个新的列表实例。
现在在C ++中我需要从pix_fmts char数组转换到codec-&gt;支持 或者从pix_fmts复制到:List
所以我按上述方式做了:
codec->SupportedPixelFormats->Add(pix_fmts[i]);
但我不确定这是否意味着复制。
这是对的吗?
答案 0 :(得分:1)
它有效,它是一种deep copy。是什么让你觉得它不起作用?结果错了吗?如果他们这样做,在那里放一个断点并试图弄错。
您可以使用Enumerable::ToList
扩展方法,而不是逐个复制。
我希望这对你有所帮助。