void split(std::string& s, std::string& delim,std::vector< std::string >* ret)
{
size_t last = 0;
size_t index=s.find_first_of(delim,last);
while (index!=std::string::npos)
{
ret->push_back(s.substr(last,index-last));
last=index+1;
index=s.find_first_of(delim,last);
}
if (index-last>0)
{
ret->push_back(s.substr(last,index-last));
}
}
总的来说nv的5系列的显卡是很烂的系列
nv在6系列之前都是被ati压着。
说说5200这块烂卡
通过测试发现5200的固定管线比可编程管线要快许多
所以,
虽然5200支持到sm2
但是游戏中还是要把它划为和mx440一个等级上去
相同测试在5600和ati9550上执行
均没有发生这样的事情。
特此备忘
新建一个QT的工程
发现使用的ZIP函数库总是在编译的时候报关于Unicode的错误
我在vs2003下工作的都很顺利
于是很自然的把vs2005的工程设置里面的使用字符集 改成了多字节
再编译,但是问题依旧
。。。。。。。。
。。。。。。。
最后,偶然的打开vs2005的c++设置选项
赫然发现一个unicode的宏定义 在上面
删之,
世界太平
几乎每一本windows编程的书都会告诉你
dll目录的查找顺序
如果你对第三方提供的dll
进行了某些hack
那么请十分注意你的dll的路径
因为windows第一个查找的路径是
windows\system32
如果这个目录中不幸的也有你需要使用的dll
那么你所做的hack将会无用。
前天来制作游戏的离线更新包
突然发现以前很正常的代码突然link错误了
而且Link错误是报库之间的函数冲突libc,libcmtd.lib和微软的函数冲突
弄了半天未果
于是恼怒之下把原来备份的代码翻出来
把cpp和.h替换之后
在编译 又OK了
当时时间紧迫,也没多想。
周一来上班
发现这个问题又出现了,
于是好好的检查了一番。
经过一层层抽丝剥茧
字节比对之后
很偶然的发现
原来是一个cpp文件导致了这个Link的问题
把这个cpp从项目中排除之后
再编译会提示说XXx函数找不到的link错误
然后再把这个cpp包含进来
再编译 就ok了
如果这个时候你把vc2003再关掉
再打开,rebulid
那么错误又会出现。
原因是什么
至今尚未查清。
使用d3d Device提供的获得显存的函数
在有的ati低端显卡上得到的数值与实际有较大出入
例如ati 9100
本来就64m显存,通过d3d的函数得到的数字有110m
估计是把agp部分也算进去了
这不是我们想要的。
于是换一个方法
使用ddraw的方法来查询,
经检验这个方法是可行的。
于是修改引擎代码
期间遇到com组件几个问题
最后遇到一个问题
编辑器在初始化引擎的时候有个函数
莫名奇妙的跳转到另外一个函数
久思,
最后原因只能是和刚才添加了一个虚函数,导致编译出来的类的结构已经变了
于是到处查到底是哪里不对,
查到工程的link属性
发现其中指向的目录是分支版本前的目录
又把增量编译给关了
但是问题依旧。
最后又过了半天才想起是include的目录没有改过来。
哎
分支版本真是害死人啊。
教训:
碰到这种问题很明显就是项目的配置问题
一定要仔细检查,
这一次都已经想到是link有问题了
却没有进一步想到include 的问题。
凡是遇到d/r运行结果不一样
或者使用vc调试运行的结果和直接运行Exe的结果不同的
首先需要检查变量是否初始化
尤其是图形方面的程序
先检查相机的各个参数
今天Load项目的Effect.dll
死活Load不进来
突然想起以前用OD调试程序,
机器上没有OD,不过随vc倒是有depency
打开一看
赫然发现原来是这个Effect.dll的一个依赖的dll没有放进来
于是乎
众DLL归位,一切正常。
QRegExp是Qt的正则表达式类.
Qt中有两个不同类的正则表达式.
第一类为元字符.它表示一个或多个常量表达式.
令一类为转义字符,它代表一个特殊字符.
一.元字符
. 匹配任意单个字符.例如, 1.3 可能是1. 后面跟任意字符,再跟3
^ 匹配字符串首. 例如, ^12可能是123,但不能是312
$ 配字符串尾. 例如, 12$可以是312, 当不能是 123
[] 匹配括号内输入的任意字符.[123]可以为1, 2 或3
* 匹配任意数量的前导字符. 例如, 1*2可以为任意数量个1(甚至没有), 后面跟一个2
+ 匹配至少一个前导字符. 例如, 1+2必须为一个或多个1, 后跟一个2
? 匹配一个前导字符或为空. 例如 1?2可以为1或这12
二.统配模式
通过 QRegExp::setPatternSyntax(QRegExp::Wildcard);可以将元字符设置为统配模式.在统配模式下,只有3个元字符可以使用.他们的功能没有变化.
? 匹配任意单个字符, 例如, 1?2可以为1,后面跟任意单个字符, 再跟2
* 匹配任意一个字符序列. 例如, 1*2, 可以为1, 后面跟任意数量的字符, 再跟一个2
[] 匹配一个定义的字符集合. 例如, [a-zA-Z\.]可以匹配 a到z之间任意一个字符和. [^a]匹配出小写a以外的字符.
三.转义序列
\. 匹配"."
\^ 匹配"^"
\$ 匹配"$"
\[ 匹配"["
\] 匹配"]"
\* 匹配"*"
\+ 匹配"+"
\? 匹配"?"
\b 匹配响铃字符,使计算机发出嘟的一声.
\t 制表符号
\n 换行符号
\r 回车符鉿
\s 任意空格
\xnn 匹配16进制为nn的字符
\0nn 匹配8进制的nn字符
这些表达式均以\开始, 与C++的转义字符相同,所以为了定义QRegExp中的一个转义序列,
需要在前面添加两个\\