Symbian 的 sprintf 函数对 “%f” 浮点数格式化不正常?

在测试工程使用了 sprintf 函数,结果发现 %f 行为不正常。
多数时候输出的时候,字符串里面都有不止一个小数点(或者是逗号,我视力不好看不清 :-s)。和想要的只有一个小数点的期望相差太远。
Nokia的论坛上找了一下,好像没有这个问题。有人通过 LC_ALL 来设置,不过我试了没有效果。
只好自己做了一下包装,将浮点数分为整数和小数两个部分处理,然后再拼接起来。

  1. std::string floattostr( double d )
  2. {
  3.  char buf[30];
  4. #ifdef OS_SYMBIAN
  5.  // 整数部分
  6.  int i = d;
  7.  sprintf (buf, "%d",i);
  8.  // 小数部分
  9.  double f = d - i;
  10.  char buf1[30];
  11.  sprintf(buf1, "%.6f",f);
  12.  // 做拼接
  13.  strcat(buf, &(buf1[1]));
  14. #else
  15.  sprintf(buf, "%f", d);
  16. #endif
  17.  return buf;
  18. }

Popularity: 4% [?]

Related

OfferKeyEventL不能响应按键操作?

写了测试代码测试按键控制。
重载了OfferKeyEventL函数

  1. TKeyResponse CMyTest_S60AppView::OfferKeyEventL(const TKeyEvent &aKeyEvent, TEventCode aType){
  2. // We only want the key press, not the key up/down event
  3.  if ( aType == EEventKey )
  4.  {
  5.    // Check if the 2 key was pressed
  6.    if ( aKeyEvent.iCode == '1' )
  7.    {    
  8.     iKeyPressCount ++;
  9.     return EKeyWasConsumed;
  10.    }
  11.    return EKeyWasNotConsumed;
  12. }

编译运行,可是怎么按都没有响应,在Debug 中下断点,也不停下来。

后来到Nokia论坛看了一下,发现使用 AddToStackL(iAppView); 添加到列表中才能处理按键响应。

  1. void CMyTest_S60AppUi::ConstructL()
  2.  {
  3.  // Initialise app UI with standard value.
  4.  BaseConstructL();
  5.  
  6.  // Create view object
  7.  iAppView = CMyTest_S60AppView::NewL( ClientRect() );
  8.  
  9.  AddToStackL(iAppView);
  10.  
  11.  PrivacyStatementL();
  12.  iAppView->BeginSession();
  13. }

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了。
在他的配置文件 \epoc32\tools\ecmt\config\config.properties 中,修改epdt.java.version.start将 1.6和6.0添加到列表中,再次在模拟器上打开菜单,发现设置界面正常出来了。

Popularity: 4% [?]

Related

Sybmian S60 中中文编码的处理

在不同平台上处理程序,首先要做的是汉字编码的处理。
这儿有一篇Nokia论坛整理的S60平台简体汉字处理浅谈
里面讲解了非Utf-8编码汉字, UTF-8编码汉字, unicode 之间的处理,包括文件读取处理。
按照网页上的代码做包装了一个函数。

  1. HBufC * StrToUnicode(TUint8 * NonUnicodeString) {
  2.    TPtrC8 point8( NonUnicodeString );
  3.    CCnvCharacterSetConverter* characterSetConverter=CCnvCharacterSetConverter::NewLC();
  4.    //一般简体中文Windows使用的简体汉字编码是Gb2312或Gbk(ASCII字符集的扩展,也称ASCI字符集)
  5.    if( characterSetConverter->PrepareToConvertToOrFromL(KCharacterSetIdentifierGbk,
  6.     iEikonEnv->FsSession()) == CCnvCharacterSetConverter::EAvailable ){
  7.    }
  8.    else if ( characterSetConverter->PrepareToConvertToOrFromL(KCharacterSetIdentifierGb2312,
  9.      iEikonEnv->FsSession())!= CCnvCharacterSetConverter::EAvailable  ){
  10.      CleanupStack::PopAndDestroy();
  11.      User::Leave( KErrNotSupported );  
  12.    }
  13.    TInt state=CCnvCharacterSetConverter::KStateDefault;
  14.    HBufC* UnicodeString = HBufC::NewL( point8.Length() );
  15.    TPtr16 point16 = UnicodeString->Des();
  16.    if( CCnvCharacterSetConverter::EErrorIllFormedInput ==
  17.      characterSetConverter->ConvertToUnicode(point16, point8, state ) ){
  18.     CleanupStack::PopAndDestroy();
  19.     User::Leave(KErrArgument);
  20.    }
  21.    CleanupStack::PopAndDestroy(1); // characterSetConverter
  22.  
  23.    return UnicodeString;
  24. }

将他添加到 AppView 类中使用。头文件要包含

  1.  #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套件不能连接手机问题。
到控制面板/添加删除程序下可以看到三个相关的程序。

将驱动删除掉(手机不能连接),然后将管理连接和诺基亚PC套件做修复,重启机器后再次通过USB线连接手机,提示发现新硬件,安装驱动等,然后PC套件就可以正常连接手机了。

怀疑上面步骤只需要卸载掉 驱动程序,并修复 连接管理 程序,应该就可以了。

Popularity: 4% [?]

Random Posts

← Previous PageNext Page →