0

我再次与 Symbians Descriptors 苦苦挣扎……

char fileName[128] = "somethingsomething";

接下来我有一个具有成员 iName 的 TEntry 对象。我想为这个 iName 分配我的文件名。我试图这样做:

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 中?

非常感谢

4

2 回答 2

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。如果是后者,您还需要转换字符编码。

于 2009-08-12T13:20:45.770 回答
0

将零终止const char []数据包装在 aTPtrC中,使其成为可以传递给的描述符Copy。但是,TEntry::iName是一个常数TBufC,但您可以调用Des它来获得一个可修改的TPtr

anEntry.iName.Des().Copy(TPtrC8((TText8 *)rEntity->fileName));
于 2009-08-12T12:58:35.240 回答