Symbian描述符赋值问题

时间:2009-08-12 12:49:15

标签: c++ symbian descriptor

我再次与Symbians Descriptors争吵......

char fileName[128] = "somethingsomething";

接下来我有一个TEntry对象,它有一个成员iName。对此iName 我想分配我的fileName。我尝试按如下方式进行:

TEntry anEntry;

anEntry.iName.Copy((TText8* )rEntity->fileName);

-

no instance of overloaded function " TBufC::Copy [with S=256]" matches the argument list
        argument types are: (TText8 *)
        object type is: TBufC<256>
                    anEntry.iName.Copy((TText8* )rEntity->fileName);

我是否需要使用其他功能将文件名复制到entry.iname?

非常感谢

2 个答案:

答案 0 :(得分:1)

TBufC是不可修改的(C代表“常数”)。它没有任何复制功能。

http://developer.symbian.com/main/documentation/sdl/symbian94/sdk/doc_source/reference/reference-cpp/E32_EKA2/TBufCClass.html

尝试类似:

iName.Des().Copy(TPtrC8((TText8*)fileName));

TBuf<256> tmp;  // or HBuf if you're worried about using so much stack
tmp.Copy(TPtrC8((TText8*)filename));
iName = tmp;

如果您无法更改iName的类型,也许您可​​以将fileName更改为存储在描述符中而不仅仅是char数组?正如你所发现的,混合这两者是痛苦的。

这都假设你的8位字符是ascii或ISO-latin,而不是UTF-8。如果是后者,您还需要转换字符编码。

答案 1 :(得分:0)

const char []中的零终止TPtrC数据换行,使其成为可以传递给Copy的描述符。但是,TEntry::iName是常量TBufC,但您可以在其上调用Des以获得可修改的TPtr

anEntry.iName.Des().Copy(TPtrC8((TText8 *)rEntity->fileName));