分类: Win32&C++预览模式: 普通 | 列表

DoDataExchange(CDataExchange* pDX)不执行,没有执行

BOOL CXXXDlg::OnInitDialog()
{
  CDialog::OnInitDialog();   //别忘了这个。
}

除了OnInitDialog之外,MFC中的许多虚函数都需要注意。

分类:Win32&C++ | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 37

1.标准输入,标准输出,标准错误

标准输入(STDIN句柄):指键盘输入,数字代号为0

char szText[1000];           
a. fscanf(stdin,"%s",&szText);
b. scanf("%s",&szText);      
c. cin>>szText;              


标准输出
(STDOUT句柄):输出到命令提示符窗口,数字代号为1

a. fprintf(stdout,"some_text_print_to_stdout.\n");
b. printf("some_text_print_to_stdout.\n");        
c. cout<<"some_text_print_to_stdout.\n";         


标准错误
(STDERR句柄):错误输出到命令提示符窗口,数字代号为2

a. fprintf(stderr,"some_err_text_print_to_stderr.\n");
b. cerr<<"some_err_text_print_to_stderr.\n";         


表面上看起来标准输出标准错误似乎并没有什么区别,实际他们确是不同的(参看2.5)。

2.重定向操作符

2.1  >  将命令的标准输出写入到文件中
执行:echo Hello world.>x.txt
意义:将echo输出的字符Hello world.写入到x.txt中,如果x.txt中已有内容,将会被清除

2.2  <  将指定文件的内容作为命令的标准输入
新建一文件x.txt,在其中保存如下内容:
line 1.
this is a new line.
line 3.

执行:find /N "a" <x.txt
意义:将x.txt中的内容作为find程序的标准输入(键盘输入),find程序在其中查找字符"a",并输出"a"所在行的行号及其内容

2.3  >>  将命令的标准输出添加到文件末尾而不删除文件中的信息。
执行:echo Hello world.>>x.txt
意义:将echo输出的字符Hello world.写入到x.txt中,如果x.txt中已有内容,则字符Hello world.被写入到x.txt的末尾

2.4  |  从第一个命令中读取标准输出并将其写入第二个命令的标准输入中。也就是管道。
执行:dir | find "软件.lnk"
意义:在本例中,将同时启动两个命令,但随后 find 命令会暂停,直到它接收到 dir 命令的输出为止。
find 命令使用 dir 命令的输出作为输入,然后将输出发送到句柄 1(即 STDOUT)。

执行:ps | grep "bas*"
意义:将ps的输出传递给grep的输入,即grep将在ps的输出中查找正则表达式"bas*",并将找到的结果输出。

2.5  >&  可将标准错误写入标准输出(2>&1),或者将标准输出写入标准错误(1>&2)
执行:dir "不存在的文件名">x.txt
看起来该命令会将dir的输出写入到x.txt中,实际上却没有全部写入,最后的“找不到文件”几个字被漏下了。
原因是“找不到文件”不是标准输出,而是标准错误

执行:dir "不存在的文件名">x.txt 2>&1
意义:该命令会将dir的输出都写入到x.txt中(标准错误被写入到了标准输出中)

执行:ls -#$ 2>&1 | grep "usage"
意义:grep程序从命令ls -#$输出的标准错误中查找包含usage的行

备注:
在Windows或者Unix/Linux下,这些概念,符号是一致的。

查看更多...

分类:Win32&C++ | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 134

MySQL C API的简单应用

#include <stdio.h>
#include <WinSock2.h> //windows下
#include <mysql.h>
#pragma comment(lib,"libmysql.lib") //unix下可静态链接libmysqlclient.a
 
int main(int argc, char* argv[], char* envp[])
{
 
    //调用mysql_library_init()mysql_library_end()的目的在于,为MySQL库提供恰当的初始化和结束处理。
    mysql_library_init(NULL,NULL,NULL);
 
     //分配或初始化与mysql_real_connect()相适应的MYSQL对象。
    MYSQL mysql;
    mysql_init(&mysql);
 
    //尝试与运行在主机上的MySQL数据库引擎建立连接。
    //在你能够执行需要有效MySQL连接句柄结构的任何其他API函数之前,mysql_real_connect()必须成功完成。
    if (!mysql_real_connect(&mysql, "localhost", "root", "chuangke","test_mysql_db",3306,NULL,NULL))
    {
        fprintf(stderr,"%s",mysql_error(&mysql));
        exit(1);
    }
 
    //该函数用于为当前连接设置默认的字符集。
    if (mysql_set_character_set(&mysql,"gbk"))
    {
        fprintf(stderr,"%s",mysql_error(&mysql));    
        exit(1);
    }
 
    //如果模式为“1”,启用autocommit模式;如果模式为“0”,禁止autocommit模式。
    mysql_autocommit(&mysql,0);
 
    //执行由“Null终结的字符串查询指向的SQL查询。
    //mysql_query()不能用于包含二进制数据的查询,应使用mysql_real_query()取而代之
    //(二进制数据可能包含字符‘\0’mysql_query()会将该字符解释为查询字符串结束)。
    if (mysql_query(&mysql,"insert into `Users`(`username`,`password`)values('王五','abc123')"))
    {
        fprintf(stderr,"%s",mysql_error(&mysql));
        exit(1);
    }
 
    //回滚当前事务。
    mysql_rollback(&mysql);
 
    //提交当前事务。
    //mysql_commit(&mysql);
 
    if (mysql_query(&mysql,"select * from `Users`"))
    {
        fprintf(stderr,"%s",mysql_error(&mysql));
        exit(1);
    }
 
    //检索完整的结果集至客户端。
    MYSQL_RES *rs=mysql_store_result(&mysql);
    if (rs==NULL)
    {
        fprintf(stderr,"%s",mysql_error(&mysql));
        exit(1);
    }
 
    //返回结果集中的行数。
    printf("found %u rows.\n",mysql_num_rows(rs));
 
    //从结果集中获取下一行
    MYSQL_ROW row;
    while( (row=mysql_fetch_row(rs))!=NULL )
    {
        printf("%s,%s,%s\n",row[0],row[1],row[2]);
    }
 
    //释放结果集使用的内存。
    mysql_free_result(rs);
 
    //关闭前面打开的连接。
    mysql_close(&mysql);
 
    mysql_library_end();
 
    return 0;
}
分类:Win32&C++ | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 73

开源MFC扩展界面库:Ultimate Toolbox的编译

下载地址:
http://www.codeproject.com/KB/MFC/UltimateToolbox.aspx

出现编译错误的文件:
OXHTMLParser.cpp
OXParser.cpp
OXPhysicalEditEx.cpp
OXQuickString.cpp

出错的原因乍看起来是字符串的引号不配对,实际上是因为Ultimate Toolbox的源码文件
都是WINDOWS-1252编码的,且文件中包含编码是0xA0的字符,这些字符无法在中文操作系
统下的VC++编辑器中正常显示。

解决方法是将这几个文件的编码转换为UTF-8,或者将“区域和语言选项”
中“非Unicode程序的语言”改为“英语-美国”。

查看更多...

分类:Win32&C++ | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 286