今天刚注意到TRAP和TRAPD类的宏内的函数调用,如果没写(),编译时也不会报错,但是实际函数并没有执行,本来以为类型MFC的消息映射机制,看来不是…
设计开发
[ZT]S60 3rd FP1 SDK编译的SDK自带的例子在N73上无法正确显示程序图标
基本原因是Nokia的mifconf变了。
方法1:
找到S60 3rd MR SDK中的mifconv.exe, 用其替换3rd FP1以及之后的SDK的mifconv.exe应该可以解决图
标消失问题。
3rd FP1以及之后的SDK的mifconv.exe生成的mif文件尺寸明显小于早期版本生成的mif文件,也许Nokia修改了mif的压缩算法导致图标不能兼容。
自己琢磨出方法1后,在网络上找到了另外一种方法。
方法2:
Issue with SVG icon display on 3rd edition
From Forum Nokia Wiki
SVG(scalable vector graphics) icons sometimes do not show up on S60
3rd edition devices when built with S60 3rd edition SDK.
This problem is because of the fact that mifconv.exe compresses the
icons which the devices are unable to read.
To fix this issue,disable the SVG compression option by specifying
‘/X’ option in mifconv.exe.
Retrieved from “http://wiki.forum.nokia.com/index.php/Issue_with_SVG_icon_display_on_3rd_edition”
[ZT]怎样写参数个数可变的宏?
一种流行的技巧是用一个单独的用括弧括起来的的 “参数” 定义和调用宏, 参数在宏扩展的时候成为类似 printf() 那样的函数的整个参数列表。
#define DEBUG(args) (printf("DEBUG: "), printf args)
if(n != 0) DEBUG(("n is %d\n", n));
明显的缺陷是调用者必须记住使用一对额外的括弧。
gcc 有一个扩展可以让函数式的宏接受可变个数的参数。 但这不是标准。另一种可能的解决方案是根据参数个数使用多个宏 (DEBUG1, DEBUG2, 等等), 或者用逗号玩个这样的花招:
#define DEBUG(args) (printf("DEBUG: "), printf(args))
#define _ ,
DEBUG("i = %d" _ i);
C99 引入了对参数个数可变的函数式宏的正式支持。在宏 “原型” 的末尾加上符号 … (就像在参数可变的函数定义中), 宏定义中的伪宏 __VA_ARGS__ 就会在调用是替换成可变参数。
最后, 你总是可以使用真实的函数, 接受明确定义的可变参数。参见问题 15.4 和 15.5。如果你需要替换宏, 使用一个函数和一个非函数式宏, 如 #define printf myprintf。
参考资料: [C9X, Sec. 6.8.3, Sec. 6.8.3.1]。
RGA app in symbian tasks list
As far as I checked RGA example applications don’t appear in Symbian tasks list.
Am I missing something or it’s not supported?
Does anyone know how to fix it?
Well, N-Gage applications don’t show in the task list. Generally I think only S60 GUI applications show up there.
To hide an app:
CApaWindowGroupName has a SetHidden() method which you call with ETrue.
To make one visible you could try SetHidden(EFalse)…
I am wondering if the system considers an RGA application as a non-gui app, or whether they’re just deliberately hidden for N-Gage.
Sorcery
windows shell extension的注册表问题
CodeProject上有个非常好的讲shell扩展的系列文章:The Complete Idiot’s Guide to Writing Shell Extensions,作者在文章中提到了一下关于如何处理注册表的问题,主要是在哪添加context menu handler的问题。
以下是原话:
We can’t reliably use an RGS script since “txtfile” may not be the correct key name.
Some other text editor may be installed that associates itself with .TXT files. If it changes the default value of the HKEY_CLASSES_ROOT\.txt key, all existing shell extensions will stop working.
实际应用时我发现,如果ext针对的是一些比较常用的格式,如PNG,那么出现上述作者预料到的问题的可能性极高,原始情况下的PNG是这样:.png->pngfile,安装PhotoShop或ACDSee等软件并关联png后,就会改变.png想对应的名字项.png->ACDSee.png .png->PhotoShop.PNG.8,类似这样的东西,所以在实际应用中依赖.rgs注册表脚本文件是一种很不可取的方式,正确的做法应该是在dll注册服务器的时候,手动处理添加关联,当然,一些com的其它注册问题写在.rgs里还是没问题的,最后也别忘了在反注册的时候,手动删除自己添加的关联。(有ATL的话直接用CRegKey非常简单)
open c的RGA程序在真机上运行所需的依赖库
模拟器上运行测试了随open c插件包发布的一些RGA例子后想看看真机效果,本以为只要安装RGA.sis内的dll就可以了,后来发现mmp里还引用了一些基础的东西,如libc等,于是补上了pips_nokia_1_3_SS.sis内的dll,运行正常!
最近发现的eclipse自动更新失败问题
提示Eclipse RCP Patch 1 XXX requires XXX(后面忘了…),然后所有其它组件都不能正常更新,解决方法是到manage configuration里把requires前面的补丁包删除就好了,不知道这是不是3.3的bug。
[ZT]DLL导出函数中有namespace时的用法
DLL中可以导出很多用户自定义的函数、类型、全局变量等。但是,我们有必要注意到这样的一种情形:我们写的DLL中有一些函数,能满足我们的需要,同时,我们也需要用到其他人写的DLL,但是不幸的是,这两个DLL中有同名的函数。尽管你可能还没碰到这样的情形,但是你可能要开始留意这个问题了,那么有什么好的办法来避免吗?
证书系统破解成功.
基本上是按照http://www.dospy.com/bbs/thread-1463143-4-1.html的教程顺序一步一步下来的,开始卡在了sending message number 00…的地方,参考了一下其他论坛上的信息,好像是因为pc suite或software update manager的版本过高导致,因为刚升级完系统到国行的最新版本,所以2个软件的版本的确都是最高的,最后折腾了半天,该卸的卸该重装的重装,成功的状态是:没装software update manager,pc suite版本是6.83的样子。后面的步骤都比较顺利,替换根证书什么的,最后a4终于在最高权限下运行了,记事本什么的都可以用了,目前没发现任何不良反应,继续实验中……