Symbian 的 sprintf 函数对 “%f” 浮点数格式化不正常?
在测试工程使用了 sprintf 函数,结果发现 %f 行为不正常。
多数时候输出的时候,字符串里面都有不止一个小数点(或者是逗号,我视力不好看不清 :-s)。和想要的只有一个小数点的期望相差太远。
Nokia的论坛上找了一下,好像没有这个问题。有人通过 LC_ALL 来设置,不过我试了没有效果。
只好自己做了一下包装,将浮点数分为整数和小数两个部分处理,然后再拼接起来。
-
std::string floattostr( double d )
-
{
-
char buf[30];
-
#ifdef OS_SYMBIAN
-
// 整数部分
-
int i = d;
-
sprintf (buf, "%d",i);
-
// 小数部分
-
double f = d - i;
-
char buf1[30];
-
sprintf(buf1, "%.6f",f);
-
// 做拼接
-
strcat(buf, &(buf1[1]));
-
#else
-
sprintf(buf, "%f", d);
-
#endif
-
return buf;
-
}
Popularity: 4% [?]
Related
OfferKeyEventL不能响应按键操作?
写了测试代码测试按键控制。
重载了OfferKeyEventL函数
-
TKeyResponse CMyTest_S60AppView::OfferKeyEventL(const TKeyEvent &aKeyEvent, TEventCode aType){
-
// We only want the key press, not the key up/down event
-
if ( aType == EEventKey )
-
{
-
// Check if the 2 key was pressed
-
if ( aKeyEvent.iCode == '1' )
-
{
-
iKeyPressCount ++;
-
return EKeyWasConsumed;
-
}
-
return EKeyWasNotConsumed;
-
}
编译运行,可是怎么按都没有响应,在Debug 中下断点,也不停下来。
后来到Nokia论坛看了一下,发现使用 AddToStackL(iAppView); 添加到列表中才能处理按键响应。
-
void CMyTest_S60AppUi::ConstructL()
-
{
-
// Initialise app UI with standard value.
-
BaseConstructL();
-
-
// Create view object
-
iAppView = CMyTest_S60AppView::NewL( ClientRect() );
-
-
AddToStackL(iAppView);
-
-
PrivacyStatementL();
-
iAppView->BeginSession();
-
}
Popularity: 4% [?]
Related
使用Bitmap Collection tool未能生成mbg文件?
在vs.net中使用carbide.vs的Bitmap Collection tool为测试程序添加了一个小图片,结果在输入日志中提示有mbm文件生成,可是在源码目录下找不到对应的 mbg 文件。是Bitmap Collection tool没有生成mbg文件吗?
看到输出日志中提示mbm文件是生成到sdk目录下的,想mbg是不是也会在sdk目录下呢?于是在sdk目录下搜索.mbg文件,发现在epoc32\include目录下还真的有。打开查看,发现其中定义了枚举量,和自己的文件名有对应关系。
因为epoc32\include已经在工程中包含,所以按照命名的规则放心大胆的在工程中 #include 进来。然后代码中使用图片资源定义常量。
Popularity: 4% [?]
Related
Symbian 程序运行碰到 KERN-EXEC 3异常问题
编译的测试程序在模拟器上运行。出现 KERN-EXEC 3异常。
分析代码,使用的功能很简单,只是创建一个 TDesC * 实例,使用后去 delete 释放了一下。
看了一下代码觉得没有问题,但是事实是出错了,对出错原因不明。
于是网上搜了一下,发现一篇 Symbian C++开发,误用NewLC导致的KERN-EXEC 3异常对照这比了一下,发现自己的还确实有问题,稍作代码调整,问题消失。
编写代码尽量按照nokia建议的多使用 PushL, Pop, PopAndDestory 等方法来做资源的释放管理。
Popularity: 4% [?]
Related
Symbian模拟器的 Cannot start ECMT Manager问题解决
打开Symbian的epoc模拟器,看着菜单上的几个项目,比如 Tools > Preferences 每次选择后过一会就提示
“Cannot start ECMT Manager“,于是到nokia的论坛搜了一下,发现不只我一个人碰到这个问题,已经有解答,就是默认安装的只找java的1.4和1.5(5.0)的,新出的Java是6.0了,程序没有去找,当作系统没有安装java了。
在他的配置文件
Popularity: 4% [?]
Related
Sybmian S60 中中文编码的处理
在不同平台上处理程序,首先要做的是汉字编码的处理。
这儿有一篇Nokia论坛整理的S60平台简体汉字处理浅谈
里面讲解了非Utf-8编码汉字, UTF-8编码汉字, unicode 之间的处理,包括文件读取处理。
按照网页上的代码做包装了一个函数。
-
HBufC * StrToUnicode(TUint8 * NonUnicodeString) {
-
TPtrC8 point8( NonUnicodeString );
-
CCnvCharacterSetConverter* characterSetConverter=CCnvCharacterSetConverter::NewLC();
-
//一般简体中文Windows使用的简体汉字编码是Gb2312或Gbk(ASCII字符集的扩展,也称ASCI字符集)
-
if( characterSetConverter->PrepareToConvertToOrFromL(KCharacterSetIdentifierGbk,
-
iEikonEnv->FsSession()) == CCnvCharacterSetConverter::EAvailable ){
-
}
-
else if ( characterSetConverter->PrepareToConvertToOrFromL(KCharacterSetIdentifierGb2312,
-
iEikonEnv->FsSession())!= CCnvCharacterSetConverter::EAvailable ){
-
CleanupStack::PopAndDestroy();
-
User::Leave( KErrNotSupported );
-
}
-
TInt state=CCnvCharacterSetConverter::KStateDefault;
-
HBufC* UnicodeString = HBufC::NewL( point8.Length() );
-
TPtr16 point16 = UnicodeString->Des();
-
if( CCnvCharacterSetConverter::EErrorIllFormedInput ==
-
characterSetConverter->ConvertToUnicode(point16, point8, state ) ){
-
CleanupStack::PopAndDestroy();
-
User::Leave(KErrArgument);
-
}
-
CleanupStack::PopAndDestroy(1); // characterSetConverter
-
-
return UnicodeString;
-
}
将他添加到 AppView 类中使用。头文件要包含
-
#include <charconv.h>
以后就可以将非UniCode的字符转化为Symbian内部使用的UniCode来使用。
Popularity: 4% [?]
Related
Symbian S60 SDK 编译运行文件目录
Symbian 的S60 SDK开发环境安装后,进行了编译测试,以及加载模拟器的运行,对这过程中对目录结构有了一点小认识。
Symbian 手机有C: D: E: Z:四个盘符
C盘是手机内存ROM
D盘是临时盘(内存交换用)
E盘是MMC卡盘
Z盘是FLASH ROM盘(Z盘是只读的,保存了所有的系统文件,借系统格式化所用)。
当你打开了C盘或者是E盘后就能看到以下文件夹
IMAGES:图片文件夹
其他:这里面可以放些自己想要的文件
SOUNDS:声音片段.
DIGITAL:数字声音(建议铃声全都放到这里,如果放到SIMPLE中手机有时找不到)
VIDEOS:视频片段。一般RM。3GP、AVI、MP4都放到这里面
SYSTEM:这个是手机安装文件的系统文件夹。
在SYSTEM中又包括很多文件,主要起到作用的是:
APP文件夹:SIS文件主程序都会放在里面
INSTALL文件夹:是手机安装文件生成的反安装程序
MAIL文件夹:是手机短信的存储位置
安装后 SDK 目录下有一个 EPOC32 为基准的路径。
“\epoc32\data” 是模拟器的目录,对模拟器的参数设置文件存放在这边, 里面的 epoc.ini 可以对模拟器的d盘路径做设置, 默认的是 \epoc32\winscw\d
还可以按照样式设置 e 盘位置。
_EPOC_DRIVE_E \epoc32\winscw\e _EPOC_LocDrv_1 F:
这个目录下有 c 和 z 目录,不知道是否真实对应模拟器中的c盘和z盘具体对应关系。
“\epoc32\winscw\c” 是仿真器的C盘
“\epoc32\release\WINSCW\UDEB” 是工程编译后在模拟上运行的程序位置所在,相当于 sys\bin 目录
“\epoc32\release\WINSCW\UDEB\Z” 是UDEB模式仿真器的Z盘
这儿是一篇 CSND上关于Symbian文件和目录处理的一篇文章。
Popularity: 4% [?]
Related
carbide.vs3.0.1链接碰到_GetUserNameA@8未找到问题解决
在Nokia的网站上下载了一个 Open C/C++ Plugins 包,为自己的空工程添加了一下对OpenC的引用。
在 MyTest.mmp 文件中添加了
SYSTEMINCLUDE \epoc32\include\stdapis LIBRARY libc.lib
结果编译出现问题,提示:
SL_All_MSE_Symbian_D.lib(unistd.win32.c.obj) : error LNK2019: CBDERR -- unresolved external symbol _GetUserNameA@8 referenced in function _getlogin
很奇怪的问题,使用GCCE编译没有报错,说明是WINSCW编译器问题,到Nokia论坛上找了一下,也有人碰到这个问题,有一个人回答的比较模糊,说调整一下库文件的连接顺序就好了。于是自己做尝试。
在vs 2005环境中调整libc.lib的引用顺序,在Linker配置中将原先添加
MSL_All_MSE_Symbian_D.lib kernel32.lib user32.lib
后面的libc.lib移动到前面,然后在C/C++配置中将
$(EPOCROOT)\epoc32\include\stdapis
放到
$(EPOCROOT)\epoc32\include
前面,变成
$(EPOCROOT)\epoc32\include\stdapis $(EPOCROOT)\epoc32\include
再次编译,链接时 符号 _GetUserNameA@8 找不到的问题消失,使用GCCE编译还是正常。
Popularity: 4% [?]
Related
Carbide.vs3.0.1以GCCE编译工程出现RCMake.exe异常解决
用vs建立了一个Symbian的空工程,然后放到版本库中,准备作为未来研究Symbian编程的基础工程。
首先试验了一下编译环境是否正常:
首先使用 Deb_S60_30M_WINSCW 方式编译:
没有错误提示,在 开发包的 S60_3rd_MR\Epoc32\release\Winscw\UDeb 目录下可以看到生成的文件。
然后使用 Rel_S60_30M_GCCE 编译:
在编译的最后步骤 VS 出现错误,提示RCMake.exe执行出错。
查看开发包的 S60_3rd_MR\Epoc32\release\GCCE\UREL 目录,有文件生成。
再查看BuildLog.htm 发现在编译日志的最后最后有提示:
System.UnauthorizedAccessException: 对路径“D:\symbian\MyTest\sis\MyTest.pkg”的访问被拒绝。 在 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 在 System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy) 在 System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options) 在 System.IO.StreamWriter.CreateFile(String path, Boolean append) 在 System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize) 在 System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding) 在 com.nokia.iguana.compilepackage.CompilePackage.UpdatePackageFile(String _projectKeyword, String _platformName, String _buildType, String _projectRoot, ProjectSettings settings, ProjectExtraSettings extraSettings) 在 com.nokia.iguana.tools.rcmake.TargetBuilder.runOtherPlatform() 在 com.nokia.iguana.tools.rcmake.RCMakeMain.Run() 在 com.nokia.iguana.tools.rcmake.RCMakeMain.main(String[] args)
后查证,是由于使用了版本库,文件签入后,.pkg文件只读造成的,将其签出,重新编译,没有错误。
对比了一下.pkg 文件前后变化,原先文件中的目录被实际目录路径替换。
Popularity: 4% [?]
Related
Nokia的PC Suite套件“没有可用的连接类型”问题解决
安装了Nokia的PC Suite套件,开始一切运行正常,可是某次关机在运行后,用USB线连接手机,提示没有手机连接。运行Nokia的手机连接向导,提示”没有可用的连接类型,因此无法建立到手机的连接。向导将退出。未能检测到可用连接类型!请重新安装诺基亚PC套件。“。
搞了很久(检查USB连线,检查手机连接,卸载重装Nokia的PC套件等),都没有解决问题,依旧是电脑上的PC套件检测不到手机连接。
后来尝试发现经过如下步骤可以解决PC套件不能连接手机问题。
到控制面板/添加删除程序下可以看到三个相关的程序。
- 1.诺基亚PC套件
- 2.驱动(英文 nokia connectivity cable driver)
- 3.连接管理(这个是英文名,PC CONNECTIVITY SOLUTION)
将驱动删除掉(手机不能连接),然后将管理连接和诺基亚PC套件做修复,重启机器后再次通过USB线连接手机,提示发现新硬件,安装驱动等,然后PC套件就可以正常连接手机了。
怀疑上面步骤只需要卸载掉 驱动程序,并修复 连接管理 程序,应该就可以了。
Popularity: 4% [?]