博文
CString 与folat int char* CTime string转换(2010-09-20 22:24:00)
摘要:CString 与folat int char * CTime string等的互相转变
本文 总结了如何实现CString 与folat int char * CTime string等的互相转变方法。
CString 是一种很特殊的 C++ 对象,它里面包含了三个值:一个指向某个数据缓冲区的指针、一个是该缓冲中有效的字符记数(它是不可存取的,是位于 CString 地址之下的一个隐藏区域)以及一个缓冲区长度。 有效字符数的大小可以是从0到该缓冲最大长度值减1之间的任何数(因为字符串结尾有一个NULL字符)。字符记数和缓冲区长度被巧妙隐藏。
1. CString 与 float 的转变
1) CString 转变为float
CString strContent;
float fNum;
fNum=atof(strContent);
2)float 转变为CString
CString strContent;
float fNum;
strContent.format("%f",fNum);
2. CString 与int 的转变
1)CString转变为int
CString strContent;
int nNum;
nNum=atoi(strContent);
2) int 转变为CSting
CString strContent;
int nNum;
Visio如何反向导出数据库设计文档(2010-08-27 14:46:00)
摘要:1支持的数据库
为了拥有最大弹性,Visio支持相当多数据库,包括主从模式的数据库(比如 IBM、Informix、Microsoft、Oracle 和 Sybase)、桌面数据库(比如 Microsoft Access 和 Corel Paradox)。
2以商业规则为基础的数据库设计
如果信息专业人员和一般用户都会说共通的语言,则数据库设计的需求便比较容易被达成。有了 Visio,我们可以使用对一般用户和开发者都具备意义的语言描述商业规则,完全不必担心实现问题。
3数据库工程再造
当我们规划数据库以进行今日的IT项目时(比如电子商务或顾客管理系统),我们需要以现有的 DBMS为基础,但不要被它们的限制所阻碍,而Visio具备我们所需的数据库工程再造威力。
4工作组的协同作业
大型数据库设计项目可轻易分散给开发者团队成员,利用 Visio产生项目的子模型,每一位开发者都能处理数据库上的一个子区段,而中心化的项目文件可合并来源模型而显示完整状态、将资料表与字段名称的改变对映到来源模型,然后产生数据库纲要,团队工作比以往更为容易。
接着,我们便一同来瞧瞧“反向工程”怎么使用。
1打开Microsoft Visio 专业版。此时便会出现“选择绘图类型” 对话框,由类别中选择“数据库”|“数据库模型图”。如果您已经打开Visio,则由菜单中选择“文件”|“新建”|“选择绘图类型”|“数据库”|“数据库模型图”。
2接着,我们会在菜单中发觉多了一个“数据库”菜单,选择“数据库”|“反向工程”。
3此时便会打开“反向工程向导”对话框。
4在此对话框中我们可以选择其数据源,并选择适当的驱动程序。
5接着出现“连接数据源”对话框,由于笔者所建立的数据库并没有设置管理员以及密码,因此直接单击“确定”即可。
6请选择 “数据源”为“Microsoft Access Database”,单......
ASSERT(afxCurrentInstanceHandle!=NULL)(2010-08-11 14:58:00)
摘要:afxwin1.inl assert at line:23
好久没更新了,奉献一篇技术贴。
最近使用ATL 7.0 写windows服务,因为以前的程序是用MFC编写的,遇到一些麻烦,解决问题花了些时间.
拿出来共享一下.
其实就是一个经常出现的错误:
afxwin1.inl assert at line:23
现象:打开afxwin1.inl 发现assert(afxCurrentInstanceHandle != NULL)出错
我心想MFC这个垃圾不会要我手动赋吧,所以研究了很久,看看自己初始化是不是缺少什么不骤,还是哪里修改了这个值. 后来发现,手动赋才是王道,因为如果是MFC程序,这个赋值在CWinAPP的里就作了,不过因为嫌太麻烦就懒得找了,呵呵.
另外一个问题,ATL程序如何获得这个句柄呢,其实每个ATL程序都会有一个全局成员 _AtlBaserModule保存这重要的句柄.
ok
solution:
在ATL程序初始化阶段手动赋值
afxCurrentInstanceHandle = _AtlBaseModule.GetModuleInstance();
afxCurrentResourceHandle = _AtlBaseModule.GetResourceInstance(); (这个也要赋一下,呵呵)
引用http://lavadiablo.spaces.live.com/blog/cns!edb786de4aef809a!246.entry
......
C++中头文件相互包含的几点问题[转](2010-08-06 13:59:00)
摘要:一、类嵌套的疑问
C++头文件重复包含实在是一个令人头痛的问题,前一段时间在做一个简单的数据结构演示程序的时候,不只一次的遇到这种问题。假设我们有两个类A和B,分别定义在各自的有文件A.h和B.h中,但是在A中要用到B,B中也要用到A,但是这样的写法当然是错误的:
class B;
class A
{
public:
B b;
};
class B
{
public:
A a;
};
因为在A对象中要开辟一块属于B的空间,而B中又有A的空间,是一个逻辑错误,无法实现的。在这里我们只需要把其中的一个A类中的B类型成员改成指针形式就可以避免这个无限延伸的怪圈了。为什么要更改A而不是B?因为就算你在B中做了类似的动作,也仍然会编译错误,表面上这仅仅上一个先后顺序的问题。
为什么会这样呢?因为C++编译器自上而下编译源文件的时候,对每一个数据的定义,总是需要知道定义的数据的类型的大小。在预先声明语句class B;之后,编译器已经知道B是一个类,但是其中的数据却是未知的,因此B类型的大小也不知道。这样就造成了编译失败,VC++6.0下会得到如下编译错误:
error C2079: 'b' uses undefined class 'B'
将A中的b更改为B指针类型之后,由于在特定的平台上,指针所占的空间是一定的(在Win32平台上是4字节),这样可以通过编译。
二、不同头文件中的类的嵌套
在实际编程中,不同的类一般是放在不同的相互独立的头文件中的,这样两个类在相互引......