1.
GFL SDK (写XnView的公司出品)
GFL SDK is a free library (used by XnView) for developers who would like to support graphics image formats easily.
The library exists in 2 versions. The light version supports the most popular formats (PNG, JPEG, ..), and the standard version supports more than 100 formats in reading and 40 in writing ! You can also manipulate and filter your pictures.
2.
TinyXml
TinyXml是一个基于DOM模型的、非验证的轻量级C++解释器。
Huipeng Zhang的评价:
这个库实在是太好了,使我觉得如果不在这里赞美几句的话都对不起它的作者了。
这是我所见过的最清晰明了,简单易用的库。库虽然不大,但是可以看出作者倾注了很大的心血。我敢向上帝保证任何一个有C++基础和XML基本知识的人可以在几个小时之内掌握这个库的使用方法。
令我佩服的还有就是作者那严谨的治学和谦虚谨慎的态度以及广阔的胸襟。这个库有一个论坛,其中有很多问题都是作者亲自回答,对每一个提交bug报告的人他都会加入到致谢列表中。另一个令我叹为观止的地方就是库的文档,这个文档是如此的清晰明了使你想看不懂都难,其中以多种形式提供的参考更是让我们感到方便至极。
这个库的源代码及其规范整洁,是我们学习编程风格的很好的教材。
作者Lee Thomason不愧是搞过艺术的,做事真是精雕细琢,pfpf。
详见:[大部分转载]TinyXml笔记
songbird的主页
http://www.songbirdnest.com/
songbird是一个完全的桌面媒体播放器,支持Windows, Mac OS X 和 Linux 。界面基于XUL和CSS,目前
还没有发布,但已经有了界面截图:
http://www.songbirdnest.com/files/images/library_context_menu.png
1. document.form.item 问题
(1)现有问题:
现有代码中存在许多 document.formName.item("itemName") 这样的语句,不能在 MF 下运行
(2)解决方法:
改用 document.formName.elements["elementName"]
(3)其它
参见 2
2. 集合类对象问题
(1)现有问题:
现有代码中许多集合类对象取用时使用 (),IE 能接受,MF 不能。
(2)解决方法:
改用 [] 作为下标运算。如:document.forms("formName") 改为 document.forms["formName"]。
又如:document.getElementsByName("inputName")(1) 改为 document.getElementsByName("inputName")[1]
(3)其它
3. window.event
(1)现有问题:
使用 window.event 无法在 MF 上运行
(2)解决方法:
MF 的 event 只能在事件发生的现场使用,此问题暂无法解决。可以这样变通:
原代码(可在IE中运行):
<input type="button" name="someButton" value="提交" onclick="javascript:gotoSubmit()"/>
...
<script language="javascript">
function gotoSubmit() {
...
alert(window.event); // use window.event
...
}
</script>
新代码(可在IE和MF中运行):
<input type="button" name="someButton" value="提交" onclick="javascript:gotoSubmit(event)"/>
...
<script language="javascript">
function gotoSubmit(evt) {
evt = evt ? evt : (window.event ? window.event : null);
...
alert(evt); // use evt
...
}
</script>
此外,如果新代码中第一行不改,与老代码一样的话(即 gotoSubmit 调用没有给参数),则仍然只能在IE中运行,但不会出错。所以,这种方案 tpl 部分仍与老代码兼容。
4. HTML 对象的 id 作为对象名的问题
(1)现有问题
在 IE 中,HTML 对象的 ID 可以作为 document 的下属对象变量名直接使用。在 MF 中不能。
(2)解决方法
用 getElementById("idName") 代替 idName 作为对象变量使用。
5. 用idName字符串取得对象的问题
(1)现有问题
在IE中,利用 eval(idName) 可以取得 id 为 idName 的 HTML 对象,在MF 中不能。
(2)解决方法
用 getElementById(idName) 代替 eval(idName)。
6. 变量名与某 HTML 对象 id 相同的问题
(1)现有问题
在 MF 中,因为对象 id 不作为 HTML 对象的名称,所以可以使用与 HTML 对象 id 相同的变量名,IE 中不能。
(2)解决方法
在声明变量时,一律加上 var ,以避免歧义,这样在 IE 中亦可正常运行。
此外,最好不要取与 HTML 对象 id 相同的变量名,以减少错误。
(3)其它
参见 问题4
7. event.x 与 event.y 问题
(1)现有问题
在IE 中,event 对象有 x, y 属性,MF中没有。
(2)解决方法
在MF中,与event.x 等效的是 event.pageX。但event.pageX IE中没有。
故采用 event.clientX 代替 event.x。在IE 中也有这个变量。
event.clientX 与 event.pageX 有微妙的差别(当整个页面有滚动条的时候),不过大多数时候是等效的。
如果要完全一样,可以稍麻烦些:
mX = event.x ? event.x : event.pageX;
然后用 mX 代替 event.x
(3)其它
event.layerX 在 IE 与 MF 中都有,具体意义有无差别尚未试验。
8. 关于frame
(1)现有问题
在 IE中 可以用window.testFrame取得该frame,mf中不行
(2)解决方法
在frame的使用方面mf和ie的最主要的区别是:
如果在frame标签中书写了以下属性:
<frame src="xx.htm" id="frameId" name="frameName" />
那么ie可以通过id或者name访问这个frame对应的window对象
而mf只可以通过name来访问这个frame对应的window对象
例如如果上述frame标签写在最上层的window里面的htm里面,那么可以这样访问
ie: window.top.frameId或者window.top.frameName来访问这个window对象
mf: 只能这样window.top.frameName来访问这个window对象
另外,在mf和ie中都可以使用window.top.document.getElementById("frameId")来访问frame标签
并且可以通过window.top.document.getElementById("testFrame").src = 'xx.htm'来切换frame的内容
也都可以通过window.top.frameName.location = 'xx.htm'来切换frame的内容
关于frame和window的描述可以参见bbs的‘window与frame’文章
以及/test/js/test_frame/目录下面的测试
----adun 2004.12.09修改
9. 在mf中,自己定义的属性必须getAttribute()取得
10.在mf中没有 parentElement parement.children 而用
parentNode parentNode.childNodes
childNodes的下标的含义在IE和MF中不同,MF使用DOM规范,childNodes中会插入空白文本节点。
一般可以通过node.getElementsByTagName()来回避这个问题。
当html中节点缺失时,IE和MF对parentNode的解释不同,例如
<form>
<table>
<input/>
</table>
</form>
MF中input.parentNode的值为form, 而IE中input.parentNode的值为空节点
MF中节点没有removeNode方法,必须使用如下方法 node.parentNode.removeChild(node)
11.const 问题
(1)现有问题:
在 IE 中不能使用 const 关键字。如 const constVar = 32; 在IE中这是语法错误。
(2)解决方法:
不使用 const ,以 var 代替。
12. body 对象
MF的body在body标签没有被浏览器完全读入之前就存在,而IE则必须在body完全被读入之后才存在
13. url encoding
在js中如果书写url就直接写&不要写&例如var url = 'xx.jsp?objectName=xx&objectEvent=xxx';
frm.action = url那么很有可能url不会被正常显示以至于参数没有正确的传到服务器
一般会服务器报错参数没有找到
当然如果是在tpl中例外,因为tpl中符合xml规范,要求&书写为&
一般MF无法识别js中的&
14. nodeName 和 tagName 问题
(1)现有问题:
在MF中,所有节点均有 nodeName 值,但 textNode 没有 tagName 值。在 IE 中,nodeName 的使用好象
有问题(具体情况没有测试,但我的IE已经死了好几次)。
(2)解决方法:
使用 tagName,但应检测其是否为空。
15. 元素属性
IE下 input.type属性为只读,但是MF下可以修改
16. document.getElementsByName() 和 document.all[name] 的问题
(1)现有问题:
在 IE 中,getElementsByName()、document.all[name] 均不能用来取得 div 元素(是否还有其它不能取的元素还不知道)。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=565591
1.学习XUL+XPCOM写一个背单词的小程序
(XPCOM是跨平台的COM)
2.学习一下Media Player Classic (MPC),在XUL程序中嵌入电影播放功能
http://sourceforge.net/projects/guliverkli/
3.改写背单词的小程序,使之可以与电影的字幕结合,通过看电影来背单词
4.程序中加入RSS功能,提供中英文字幕质量都比较高的电影简介和下载链接(利用sourceforge提供的主页空间)
5.加入自动更新功能
......................................................................................
如果你感兴趣,请加入我的
邮件论坛(见我的blog页面顶部)
今天在CSDN的上看到了一篇文章"神州电脑—你害了多少毕业生",由于神州的老总是我们海安人,便多关注了一下,google到了原帖:
http://www.tianya.cn/publicforum/Content/no20/1/64691.shtml
和CSDN上的说法还是有一点区别的.
最大感受是中国人太容易陷入无谓的争吵,其实静下心来学一点真正的本领才是根本.
重要的是有人生目标,为之奋斗,希望在年迈的时候不要悲哀在堕落中逝去的青春.
能有一个自己的梦的人是幸福的,不过大家(至少在我的同学中)似乎都什么可以称的上理想的目的,一切都按部就班的过着,在无聊的时候就看看YY小说,玩玩游戏,或是在学生会开毫无意义的会.却很少有人想过这一生是为着什么而活,在几百年的星空下,还会不会有人会讲起关于自己的曾经故事.
人们好像都在追逐一种轻松,富足的生活.为了工资工作,然后再在种种喧嚣中宣泄自己那过剩的激情.日子就这么过着.所有人都想着成为Bill Gates,不过也基本上仅仅限于想象而已.甘于平庸的小康生活,同样是一种选择,无可厚非.
知音难觅,一个人总是很孤独.不过,没有人会一开始就了解你.We are all nobody.写下自己的足迹,在路上,我永远向前.
当然,任何的传奇的背后都有着艰辛的往事,空想是毫无意义的,一分一秒都是人生.
但愿我能够死而无憾.
张沈鹏
2005-12-27
说明:备忘,现在只是构思,等期末考试好了放假回家正式开工(大概2005年1月24号吧).欢迎大家提建议.
正文:
界面用XULrunner运行XUL,在C++中实现一个SQLite的XPCOM的接口,SQL语句放在JavaScript脚本中.
将用到的算法:
把单词的还原为原型:
算法:
The Porter Stemming Algorithm
http://www.tartarus.org/~martin/PorterStemmer/
http://www.comp.lancs.ac.uk/computing/research/stemming/general/
算法的应用(可以用的库):
http://snowball.tartarus.org (Java and C)
https://sourceforge.net/projects/porterstemmers/ (C++)
可以用到的词典
英英
DICT Development Group
http://www.dict.org
英英-语义词典,参见Wordnet的介绍(中文版)
WordNet
http://wordnet.princeton.edu/
英英-魔鬼词典(没有下载,只有把26个字母一个一个复制,粘贴)
The Devil's Dictionary by Ambrose Bierce
www.alcyone.com/max/lit/devils/
单词列表
Kevin's Word List Page
wordlist.sourceforge.net/
汉英
CEDICT
www.mandarintools.com/cedict.html
汉汉
CCDICT
www.chinalanguage.com/CCDICT/
XUL Cross Platform Music Player
https://sourceforge.net/projects/xulmusic/
数据库的划分:
1.基本单词库
表:
a.单词库 列:单词(UNIQUE主键)
b.英汉字典库 列:单词(外键) 词性 解释
c.有发音的单词库 列:单词(外键)
d.短语库 列:短语 解释
e.例句库 列:例句 解释
2.书籍数据库
表:
a.书籍 列:单词
3.用户数据库
表:
a.单词(UNIQUE主键) 列:单词 动作(背诵/正确默写/错误默写) 日期
XULRunner的HelloWorld
用C++写软件界面很烦,用类似于网页的XUL给C++程序写界面比较简单,firefox系列产品都是XUL写界面,C++写后台,研究半天写完XULRunner的HelloWorld。
下载地址
http://ak747.ys168.com运行方式
xulrunner.exe 路径\application.ini
文件prefs.js中加上
pref("intl.locale.matchOS",true);
可以根据操作系统的语言自动选择语言
12.20更新
可以使用CSS了
相关信息,google吧,不过大多是英文。。。。。
学习《C++ Primer》的笔记
函数指针的一种替代策略是Function object(函数对象)。
函数对象与函数指针相比较有两个方面的优点:首先如果被重载的调用操作符是inline函数则编译器能够执行内联编译,提供可能的性能好处;其次函数对象可以拥有任意数目的额外数据,用这些数据可以缓冲结果,也可以缓冲有助于当前操作的数据。
函数对象是一个类,它重载了函数调用操作符operator() ,该操作符封装了一个函数的功能。典型情况下函数对象被作为实参传递给泛型算法,当然我们也可以定义独立的函数对象实例。
来看一个例子:
#include<vector>
#include<string>
#include<iostream>
#include<algorithm>
using namespace std;
class Sum {
int val;
public:
Sum(int i) :val(i) { }
//当在需要int的地方,Sum将自动转换为int类型
//这里是为了方便cout<<Sum的实例;
operator int() const { return val; }
//写在类中的函数代码一般默认为内联代码
int operator()(int i) { return val+=i; }
};
void f(vector<int> v)
{
Sum s = 0; //Sum s = 0等价于Sum s(0),不等价于Sum s;s = 0;
//对vector<int>中的元素求和
//函数对象被作为实参传递给泛型算法
s = for_each(v.begin(), v.end(), s);
cout << "the sum is " << s << "\n";
//更简单的写法,定义独立的函数对象实例
cout << "the sum is " << for_each(v.begin(), v.end(), Sum(0)) << "\n";
}
int main()
{
vector<int> v;
v.push_back(3); v.push_back(2); v.push_back(1);
f(v);
system("pause");
return 0;
}
先谢谢cppblog的各位指教.
链接到静态库(*.lib)很简单,不多说.链接到DLL动态库分隐式链接和显式链接,显式链接较复杂,请参考MSDN这里学习一下隐式链接.
为隐式链接到 DLL,可执行文件必须从 DLL 的提供程序获取下列各项:
- 包含导出函数和/或 C++ 类的声明的头文件(.H 文件)
- 要链接的导入库(.LIB files)。(生成 DLL 时链接器创建导入库。)
- 实际的 DLL(.DLL 文件)
隐式链接需要一个由动态连接库产生的.LIB文件(导入库),并把它链接到应用程序的工程中.该导入库仅包含加载DLL的代码和实现DLL函数调用的代码。在导入库中找到外部函数后,会通知链接器此函数的代码在DLL中。要解析对DLL的外部引用,链接器只需向可执行文件中添加信息,通知系统在进程启动时应在何处查找 DLL 代码。
系统启动包含动态链接引用的程序时,它使用程序的可执行文件中的信息定位所需的DLL。如果系统无法定位DLL,它将终止进程并显示一个对话框来报告错误。如果找到了DLL,系统将DLL模块映射到进程的地址空间中。与程序代码的其余部分一样,DLL代码在进程启动时映射到进程的地址空间中,且仅当需要时才加载到内存中。
Windows将遵循下面的搜索顺序来定位DLL
- 包含EXE文件的目录
- 进程的当前工作目录
- Windows系统目录(system/system32)。GetSystemDirectory 函数检索此目录的路径。
- Windows目录.GetWindowsDirectory 函数检索此目录的路径。
- 列在Path环境变量中的一系列目录
现在的问题是如何从DLL生成导入库.这需要用到LIB命令行实用程序(在目录Microsoft Visual Studio .NET 2003\Vc7\bin中)和.DEF文件(dll一般提供了),下面我以sqlite3_2_2的dll为例.
|
注意 |
如果运行时出现 缺少 mspdb71.dll 这个文件,那么进入这个目录:Microsoft Visual Studio .NET 2003\Common7\IDE 可找到这文件,将这文件拷贝到\Microsoft Visual Studio .NET 2003\Vc7\bin 即可。 |
将lib.exe所在的目录添加到环境变量path,在sqlite3.def所在目录下运行 lib /DEF:sqlite3.def /MACHINE:X86/MACHINE:X86参数是指定机器的类型,可以用lib /?查找帮助.现在应该生产了sqlite3.exp和sqlite3.lib两个文件.
导出 (.exp) 文件包含有关导出函数和数据项的信息。我们还用不到.现在把sqlite3.dll复制到windows\system32目录下,写test一个程序,链接到sqlite3.lib,Ok可以使用了
如果是是你自己建的DLL项目,在vs2003中DLL导入库的创建很简单(nanami指点,没有验证):
- 选择主菜单 项目->属性
- 选择 “链接器->高级->导入库”,然后输入一个以.lib结尾的文件名。默认一般可以用Marko设置成$(OutDir)/$ (ProjectName).lib。记得,Debug配置和Release配置都要设置。生成的导入库.lib会在和生成的DLL在同一个目录下。
- 在你需要调用DLL的项目里,将.lib文件加入到附加依赖项里,当然也要设置一下附加库目录~.~OK,大功告成了
:ICE和ACE有啥区别?哪个性能更好些?
:ICE和ACE拿在一起比较不合适,他们的目标都不一样,ICE还是和SOAP之类的东西比较吧。
网络性能当然是ACE好,ICE的强项是RPC,也就是说它实现了一个协议+运行时,而且跨平台跨语言,比起CORBA来说,ICE不知道轻了多少。
如果是写一些网络性能要求较高的C/S程序,我觉得还是ACE合适,毕竟还可以选择各种网络模型。如果编写服务,还是选ICE吧,特别是3.0还支持网格。java环境下我比较过SOAP和ICE的性能,同样一个登录服务,ICE一秒钟强调用300次,SOAP只调用了40次。