C++ Coder

HCP高性能计算架构,实现,编译器指令优化,算法优化, LLVM CLANG OpenCL CUDA OpenACC C++AMP OpenMP MPI

C++博客 首页 新随笔 联系 聚合 管理
  98 Posts :: 0 Stories :: 0 Comments :: 0 Trackbacks

#


资源文件.rc的代码如下:
 
#define IDS_CONTEXT_EXTRACT             142
#define IDS_CONTEXT_EXTRACT_HELP        143
#define IDS_CONTEXT_COMPRESS            144
#define IDS_CONTEXT_COMPRESS_HELP       145
#define IDS_CONTEXT_OPEN                146
#define IDS_CONTEXT_OPEN_HELP           147
#define IDS_CONTEXT_TEST                148
#define IDS_CONTEXT_TEST_HELP           149
#define IDS_CONTEXT_CAPTION_HELP        150
#define IDS_CONTEXT_POPUP_CAPTION       151
                                   
#define IDS_CONTEXT_EXTRACT_HERE           152
#define IDS_CONTEXT_EXTRACT_HERE_HELP      153

#define IDS_CONTEXT_EXTRACT_TO           154
#define IDS_CONTEXT_EXTRACT_TO_HELP      155

#define IDS_CONTEXT_COMPRESS_TO          156
#define IDS_CONTEXT_COMPRESS_TO_HELP     157

#define IDS_CONTEXT_COMPRESS_EMAIL       158
#define IDS_CONTEXT_COMPRESS_EMAIL_HELP  159

#define IDS_CONTEXT_COMPRESS_TO_EMAIL       160
#define IDS_CONTEXT_COMPRESS_TO_EMAIL_HELP  161

#define IDS_CONTEXT_FOLDER  170
#define IDS_CONTEXT_ARCHIVE 171

#define IDS_CONTEXT_COMPRESS_GPU       180
#define IDS_CONTEXT_COMPRESS_GPU_HELP  181


编译的时候出现
1>------ 已启动生成: 项目: Explorer, 配置: Debug x64 ------
1>  ContextMenu.cpp
1>resource.h(31): fatal error RC1004: unexpected end of file found
1> 
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
的错误提示。
解决方法:
资源编译器错误 RC1004 错误消息 遇到意外的文件结束 此错误是由于文本文件的最后一行中缺少换行符回车符而造成的。
posted @ 2012-10-20 16:33 jackdong 阅读(714) | 评论 (0)编辑 收藏

http://www.cnblogs.com/coderzh/archive/2009/04/06/1426755.html

前段时间学习和了解了下Google的开源C++单元测试框架Google Test,简称gtest,非常的不错。 我们原来使用的是自己实现的一套单元测试框架,在使用过程中,发现越来越多使用不便之处,而这样不便之处,gtest恰恰很好的解决了。

其实gtest本身的实现并不复杂,我们完全可以模仿gtest,不断的完善我们的测试框架, 但最后我们还是决定使用gtest取代掉原来的自己的测试框架,原因是:

1.不断完善我们的测试框架之后就会发觉相当于把gtest重新做了一遍,虽然轮子造的很爽,但是不是必要的。

2.使用gtest可以免去维护测试框架的麻烦,让我们有更多精力投入到案例设计上。

3.gtest提高了非常完善的功能,并且简单易用,极大的提高了编写测试案例的效率。

gtest的官方网站是:

http://code.google.com/p/googletest/

从官方的使用文档里,你几乎可以获得你想要的所有东西

http://code.google.com/p/googletest/wiki/GoogleTestPrimer

http://code.google.com/p/googletest/wiki/GoogleTestAdvancedGuide 

 

如果还想对gtest内部探个究竟,就把它的代码下载下来研究吧,这就是开源的好处,哈!

官方已经有如此完备的文档了,为什么我还要写呢?一方面是自己记记笔记,好记性不如烂笔头,以后自己想查查一些用法也可以直接在这里查到,一方面是对于不想去看一大堆英文文档的朋友,在我这里可以快速的找到gtest相关的内容。

下面是该系列的目录:

1.玩转Google开源C++单元测试框架Google Test系列(gtest)之一 - 初识gtest

2.玩转Google开源C++单元测试框架Google Test系列(gtest)之二 - 断言

3.玩转Google开源C++单元测试框架Google Test系列(gtest)之三 - 事件机制

4.玩转Google开源C++单元测试框架Google Test系列(gtest)之四 - 参数化

5.玩转Google开源C++单元测试框架Google Test系列(gtest)之五 - 死亡测试

6.玩转Google开源C++单元测试框架Google Test系列(gtest)之六 - 运行参数

7.玩转Google开源C++单元测试框架Google Test系列(gtest)之七 - 深入解析gtest

8.玩转Google开源C++单元测试框架Google Test系列(gtest)之八 - 打造自己的单元测试框架


额外篇:

1.gtest中如何跳出当前测试案例

2.编写优美的GTest测试案例

3.gtest 参数化测试代码示例 (内含完整工程示例)

 

作者:CoderZhCoderZh的技术博客 - 博客园
微博:http://t.sina.com.cn/coderzh
出处:http://coderzh.cnblogs.com
文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

posted @ 2012-10-20 00:17 jackdong 阅读(350) | 评论 (0)编辑 收藏

http://blog.csdn.net/eclipser1987/article/details/8024555

为什么C++中不建议使用malloc calloc realloc等C语言函数?因为:这样分配的空间,返回的指针需要通过free来释放,但free释放空间不同于delete,free不会执行析构函数!

/* 
 * File:   main.cpp
 * Author: Vicky.H
 * Email:  eclipser@163.com
 
*/

#include 
<iostream>
#include 
<cstdlib>
#include 
<memory>

class A {
public:

    A() 
{
        std::cout 
<< "create A" << std::endl;
    }


    A(
const A& o) {
        std::cout 
<< "copy A" << std::endl;
    }


    
~A() {
        std::cout 
<< "delete A" << std::endl;
    }

}
;

/*
 * 
 
*/

int main(void{

    
char* buf1 = (char*) malloc(10); // 
    char* buf2 = (char*) calloc(110); // 效果虽然与上面一样,不同的是,calloc会将空间初始化为0.

    free(buf1);
    free(buf2);

    std::cout 
<< "---------------------------" << std::endl;

    
// 为什么C++中不建议使用malloc calloc realloc等C语言函数?因为:这样分配的空间,返回的指针需要通过free来释放,但free释放空间不同于delete,free不会执行析构函数!

    A
* ap = (A*) malloc(sizeof (class A) * 10);
    std::uninitialized_fill_n(ap, 
10, A());
    free(ap); 
// 调用1次create A ,1次delete A 10次copy A
    return 0;
}


 

---------------------------
create A
copy A
copy A
copy A
copy A
copy A
copy A
copy A
copy A
copy A
copy A
delete A

虽然实例程序,对空间的分配释放没有任何错误,但在某些情况,比如A类的析构伴随着某些特殊处理,将导致程序异常!

 

posted @ 2012-10-19 22:57 jackdong 阅读(678) | 评论 (0)编辑 收藏

     摘要: log4cplus是C++编写的开源的日志系统,功能非常全面,用到自己开发的工程中会比较专业的,:),本文介绍了log4cplus基本概念,以及如何安装,配置。  ### 简介 ###log4cplus是C++编写的开源的日志系统,前身是java编写的log4j系统.受Apache Software License保护。作者是Tad E. Smith。log4cplus具有线程安全、灵...  阅读全文
posted @ 2012-10-19 22:55 jackdong 阅读(464) | 评论 (0)编辑 收藏

     摘要: http://blog.csdn.net/eclipser1987/article/details/6904301 log4cplus是C++编写的开源的日志系统,功能非常全面,用到自己开发的工程中会比较专业的,:),本文介绍了log4cplus基本概念,以及如何安装,配置。  ### 简介 ###log4cplus是C++编写的开源的日志系统,前身是java编写的log4j系统.受...  阅读全文
posted @ 2012-10-19 22:54 jackdong 阅读(1486) | 评论 (0)编辑 收藏

     摘要: 一.简介     log4cplus是C++编写的开源的日志系统,功能非常全面.本文介绍如何在Windows+VS2008中使用该日志库。   二.下载     可从网站[url]http://log4cplus.sourceforge.net[/url]上去下载 log4cplus 1.0.3 rc9,具体地址[url...  阅读全文
posted @ 2012-10-19 22:48 jackdong 阅读(2632) | 评论 (0)编辑 收藏

http://blog.163.com/tianshi_17th/blog/static/4856418920085209414977/

关于C++中的char*wchar_t*这两种类型的相互转换,网上说的大多很繁琐,可行性也不高。下面这个方法是在MSDN里面找到的,个人认为还比较不错:

 

char*转换为wchar_t*

stdlib.h中的mbstowcs_s函数,可以通过下面的例子了解其用法:

char *CStr = "string to convert";
size_t len 
= strlen(CStr) + 1;
size_t converted 
= 0;
wchar_t 
*WStr;
WStr
=(wchar_t*)malloc(len*sizeof(wchar_t));
mbstowcs_s(
&converted, WStr, len, CStr, _TRUNCATE);

其结果是WStr中储存了CStrwchar_t版本。

 

wchar_t*转换为char*

和上面的方法类似,用stdlib.h中的wcstombs_s函数,例子:

wchar_t *WStr = L"string to convert";
size_t len 
= wcslen(WStr) + 1;
size_t converted 
= 0;
char *CStr;
CStr
=(char*)malloc(len*sizeof(char));
wcstombs_s(
&converted, CStr, len, WStr, _TRUNCATE);

 这时WStr中的内容将被转化为char版本储存在CStr中。

另外还可以通过流的方法来char*类型转换为wchar_t*类型,但这样的转换得到的结果将是const类型,而类似的方法不能将wchar_t*类型转换为char*类型。

 

把(constchar*转换为const wchar_t*

需要用到 sstream 头文件:

char *cstr="string to convert";
wstringstream wss;
wss
<<cstr;

再调用wss.str().c_str(); 即可得到 const wchar_t* 类型的返回值。

虽然stringstream流不能将wchar_t*转换成char*,但可以用来进行数值类型和字符串之间的转换,例如:

double d=2734792.934f;
stringstream ss;
ss
<<d;

调用ss.str()可得到string类型字符串 ”273479e+006”,又如:

string str("299792458");
stringstream ss;
long i=0;
ss
<<str;
ss
>>i;

此时i=299792458

posted @ 2012-10-18 17:21 jackdong 阅读(521) | 评论 (0)编辑 收藏

http://blog.csdn.net/tangaowen/article/details/6436053

                                           进程启动命令行中怎么传递带空格的参数

  

 一般我们在一个exe里面启动另外一个exe使用 ShellExecute 命令函数:

比如下面的代码:

std::string   strExePath="D:/MyExe.exe";

std::
string   strMyParas="D:/config.ini";

ShellExecute(NULL, _T(
"open"), strExePath.c_str(), strMyParas.c_str(), NULL, SW_SHOWNORMAL);

 

要启动的exe位于D盘的根目录下面,要传递的命令行参数为一个路径:

D:/config.ini 

那么在MyExe.exe里面怎么获得传递过去的命令行参数呢,看下面的代码:

 

int   argc=0
LPWSTR   
*argv=::CommandLineToArgvW(::GetCommandLineW(),&argc); 
        
if(argc>=2)
{
    strIniPath
=argv[1];
}

那么,我们从上面的代码可以得出,命令行参数为argc-1个,都放在argv这个数组中,其中 argv[0] 是程序本身的执行路径,所以argc>=1 .

我们通过argv[1]就可以获得第一个命令行参数,比如上面的代码,我们就获得了传递过来的命令行参数为D:/config.ini   。

但是,当我改变传递的命令行参数的内容为D:/Program Files/config.ini的时候

std::string   strExePath="D:/MyExe.exe";

std::
string   strMyParas="D:/Program Files/config.ini";

ShellExecute(NULL, _T(
"open"), strExePath.c_str(), strMyParas.c_str(), NULL, SW_SHOWNORMAL);

 

我的MyExe.exe程序对命令行参数的解析出问题了,解析的结果为:D:/Program,而且argc=3,显然,程序把我的一个参数“D:/Program Files/config.ini”解析为两个参数:

argv[1]="D:/Program" ,  argv[2]="Files/config.ini" 了。

这是个比较严重的bug ,那么怎么告诉系统我传递的是一个带有空格的参数,而不是多个参数呢?

 解决方法:

可以使用下面的代码:

    wstring  strExePath=wstring(L"/"");
        strExePath.append(strExePath);
        strExePath.append(wstring(L
"/""));

        wstring  strMyParas
=wstring(L"/"");
        strMyParas.append(strMyParas);
        strMyParas.append(wstring(L
"//"));
        strMyParas.append(wstring(L
"/""));

        ShellExecute(NULL, _T(
"open"), strExePath.c_str(), strMyParas.c_str(), NULL, SW_SHOWNORMAL);

将要传递的参数用"/""  和 "/""  给包起来,然后传递给ShellExecute就不会出现问题了。 


 


posted @ 2012-10-18 15:50 jackdong 阅读(2037) | 评论 (0)编辑 收藏

     摘要: http://www.cnblogs.com/bluesky_blog/archive/2009/04/29.html管理用户权限可以实现以编程方式使用下列步骤: 打开与 LsaOpenPolicy() 的目标计算机上的策略。 要授予的权限,打开 POLICY_CREATE_ACCOUNT 和 POLICY_LOOKUP_NAMES 访问策略。 若要吊销权限,打开 POLICY_LOOKUP_...  阅读全文
posted @ 2012-10-18 10:29 jackdong 阅读(885) | 评论 (0)编辑 收藏

     摘要: GetVersion和GetVersionEx 出自:http://flyxxtt.blogbus.com/logs/42705986.html Windows API 中有两个函数可以得到系统版本信息:GetVersion和GetVersionEx。       GetVersion这个函数曾经困扰了很多程序员,其本来设计的是在DW...  阅读全文
posted @ 2012-10-18 10:19 jackdong 阅读(701) | 评论 (0)编辑 收藏

仅列出标题
共10页: First 2 3 4 5 6 7 8 9 10