载入中,请稍候……

远程进程DLL注入

Admin 于 2008-10-26 17:44:12 发表C/C++

被阅774次, 0票 发表评论

UTF8ToBytes

Admin 于 2008-10-22 01:04:28 发表C/C++

  1. byte src[] = {(byte)228,(byte)184,(byte)173,(byte)229,(byte)155,(byte)189,0};  //中国 
  2.  
  3. int ucCharLen = MultiByteToWideChar(CP_UTF8,0,(LPCSTR)src,-1,NULL,0); 
  4. LPWSTR wbuf = new WCHAR[ucCharLen]; 
  5. memset(wbuf,0,sizeof(wbuf)); 
  6. MultiByteToWideChar(CP_UTF8,0,(LPCSTR)src,-1,wbuf,ucCharLen); 
  7.  
  8. byte* buf = NULL; 
  9.  
  10. int byteLength = WideCharToMultiByte(CP_UTF8,0,(LPCWSTR)wbuf,-1,NULL,0,NULL,NULL); 
  11. buf = new byte[byteLength]; 
  12. memset(buf,0,sizeof(buf)); 
  13. WideCharToMultiByte(CP_UTF8,0,(LPCWSTR)wbuf,-1,(LPSTR)buf,byteLength,NULL,NULL); 
  14.  
  15. delete buf; 
  16. delete wbuf; 
被阅825次, 0票 发表评论

C++实现目录文件的非递归遍历并用伪函数来进行文件操作

Admin 于 2008-10-22 00:53:21 发表C/C++

在用进行文件操作时,少不了和目录的递归打交道,但我一般认为.递归算法比较慢.如果可以采用非递归实现,就不要递归.

在非递归算法中,一般我们用一个队列来保存相应的数据.一会列出代码.
还有一个问题,我们递归目录,无非是想对文件进行操作,或者想得到文件的一个列表. 这时,你可以会采用回调函数. 但在我看来,还有更好的实现文案,让"回调"函数是一个对象,就既可以实现回调,也可以保存数据,这就是C++语言的仿函数.今天,我们就用仿函数来对指 定的文件进行操作,例如修改文件,或者得到文件列表.
先看一下递归函数的实现:

被阅843次, 0票 发表评论

MFC中对音量的控制:增大,减小,静音

Admin 于 2008-10-22 00:44:54 发表C/C++

  1. //增大音量: 
  2. keybd_event(VK_VOLUME_UP,MapVirtualKey(VK_VOLUME_UP,0),KEYEVENTF_EXTENDEDKEY,0); 
  3. keybd_event(VK_VOLUME_UP,MapVirtualKey(VK_VOLUME_UP,0),KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,0); 
  4.  
  5. //减小音量: 
  6. keybd_event(VK_VOLUME_DOWN,MapVirtualKey(VK_VOLUME_DOWN,0),KEYEVENTF_EXTENDEDKEY,0); 
  7. keybd_event(VK_VOLUME_DOWN,MapVirtualKey(VK_VOLUME_DOWN,0),KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,0); 
  8. //静音: 
  9. keybd_event(VK_VOLUME_MUTE,MapVirtualKey(VK_VOLUME_MUTE,0),KEYEVENTF_EXTENDEDKEY,0); 
  10. keybd_event(VK_VOLUME_MUTE,MapVirtualKey(VK_VOLUME_MUTE,0),KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,0); 
被阅1403次, 1票MFC 音量 发表评论

VC常用小知识[2]

Admin 于 2008-09-30 02:26:18 发表C/C++

被阅596次, 0票 发表评论

在VC中进行Unicode开发

Admin 于 2008-09-30 02:22:54 发表C/C++

1. 添加 UNICODE 和 _UNICODE 预处理定义
位置:Project Settings -> C/C++ -> Preprocessor definitions
添加了这两个定义后,MFC的一些内置类型如 TCHAR、CString 都将转为支持宽字符类型(wchar_t)
2. 使用宽字符相关类型,如:char -> TCHAR、char * -> LPTSTR、const char * -> LPCTSTR
3. 对字符串常量使用 _T() 宏
4. 替换C库中的中字符串操作函数,如 strlen -> _tcslen、strcmp -> _tcscmp 等,类似的还有C库中字符串与数字的转换函数,如 atoi -> _ttoi、itoa -> _itot 等。
5. 将 Project Settings -> Link -> Output -> Entry Point 设为 wWinMainCRTSTartup,否则会有如下错误:msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16
6. C++标准库中的string,有对应的宽字符版本wstring,两者均为basic_string的特化版本,可在StdAfx.h中添加:

  1. #ifdef _UNICODE 
  2. #define tstring wstring 
  3. #else 
  4. #define tstring string 
  5. #endif 

然后在代码中使用 tstring 即可,类似的还有 fstream/wfstream、ofstream/wofstream 等
7. 宽字符版本的英文字符仍可直接与整型值进行比较,如:
CString s = _T("ABC");
ASSERT(s[0] == 'A');
8. 对于仍需使用ANSI字符串的地方,如第三方类库的接口,仍可继续使用;如需进行Unicode字符串和ANSI字符串的互转换,可使用 MultiByteToWideChar 和 WideCharToMultiByte

被阅638次, 0票Unicode 发表评论

CFileFind类的使用总结

Admin 于 2008-09-29 03:46:06 发表C/C++

1、CFileFind类的声明文件保存在afx.h头文件中。
2、该类的实现的功能:执行本地文件的查找(查找某个具体的文件,查找某类文件x*.x*,查找所有文件*.*)
3、CFileFind类是CGopherFileFind和CFtpFileFind类的基类。
4、CFileFind类的构造函数::CFileFind()和关闭函数::Close()我会成对使用。
5、CFileFind类的成员函数我根据其操作特性划分为3类:查找操作类、获得文件属性类、判断文件属性类。(下面我先进行函数罗列并没有完整的描述函数的参数)
查找操作类
    ::FindFile();
    ::FindNextFile();
获得文件属性类
    ::GetCreationTime();
    ::GetLastAccessTime();
    ::GetLastWriteTime();
    ::GetFileName();
    ::GetRoot();
    ::GetFilePath();
    ::GetFileTitle();
    ::GetFileURL();
    ::GetLength();
    
判断文件属性类
    ::IsArchived();
    ::IsCompressed();
    ::IsDirectory();
    ::IsDots();
    ::IsHidden();
    ::IsNormal();
    ::IsReadOnly();
    ::IsSystem();
    ::IsTemporary();
    ::MatchesMask();
6、CFileFind类中成员函数使用应注意的顺序
      在创建了CFileFind对象后,先执行::FindFile()函数,然后执行::FindNextFile(),然后选择执行(获得文件属性类)的函数或者(判断文件属性类)函数。
7、CFileFind类成员函数的详细分析:

被阅697次, 0票 发表评论

C++位操作介绍

Admin 于 2008-09-23 07:02:26 发表C/C++

C++位操作包括两种:传统的C语言方式的位操作和C++中利用bitset容器的位操作

   
一、传统的C方式位操作:
1.基本操作:
   使用一个unsigned int变量来作为位容器。
2.操作符:
|   按位或操作符:result=exp1|exp2;当exp1和exp2中对应位中至少有一个为1时,result中对应位为1,否则为0。
&  按位与操作符::result=exp1&exp2;当exp1和exp2中对应位全为1时,result中对应位为1,否则为0。
^  按位异或或操作符:result=exp1^exp2;当exp1和exp2中对应位不相同时,result中对应位为1,否则为0。
~  反转操作符:将位容器中的所有位都反转,1变为0,0变为1。
<< 按位左移操作符:exp<<n,将容器中所有的位向左移n位,空出的位用0填充。
>> 按位右移操作符:exp>>n,将容器中所有的位向右移n位,空出的位用0填充。
|=,&=,^= 分别对应|&^三种操作符的复合操作符。
3.常用操作
   这里我们假设有一个result的unsigned int变量用来储存32个学生的成绩(通过和不通过分别用0和1),这样result就有33位(result从右至左,从0开始计算位数,在这个例子中0位被浪费)。
(a) 将第27位设置为及格(设作1)其他位不变:
   result|=(1<<27) //任意的位值与1作按位或操作其值为1,而与0作按位与操作其值不变
(b) 将第27位设置成不及格(设为0)。
   result&=~(1<<27) //任意的位值与0作按位与操作其值为0,而与1作按位与操作其值不变
(c) 反转第27位的值。
   result^=(1<<27) //任意的位值与1作按位异或操作其值为1,而与0作按位异与操作其值不变
 
二、C++中的bitset容器
1.头文件:
  #include <bitset>
2.声明一个容器:
 (a)声明一个指定位数的空容器(所有位设为0): bitset<int> bits;
 (b)声明一个指定位数并将指定的几个位初始化为相应值的容器: bitset<n> bits(int);
     bitdet<int> bits(string&)
总结:bitset模板类中类型参数传递容器的位数,而构造函数参数通过一个int或一个string&值来从右至左初始化容器中的相应值。
3.bitset的基本用法:
4.bitset与传统C位操作及字符串的转换
   可以通过to_string()成员将容器转输出为一个string字符串,另外还可以用to_long()成员将容器输出到传统的用于C风格的位容器中。如:
  unsigned long bits = bits.to_long();
  sting str(bits.to_string());
5.bitset支持所有的位操作符。

 

被阅472次, 1票 发表评论
1 / 3 / 20 | « 1 2 3 » |

Powered by MiniBoke v2.0.0.8 Build 0828

Copyright © 2008 迷你博客. All rights reserved.

粤ICP备07500939号