C/C++
普通网友
这个作者很懒,什么都没留下…
展开
-
使用C++filt工具去除C++的名称转义
由于C++的name mangling机制,在使用pstack或ldd等输出C++函数名时 和源代码中的函数名并不是对应的。解决方法很简单:pstack -p 123 | c++filt原创 2017-05-01 10:20:15 · 4225 阅读 · 1 评论 -
C++打印PE文件头信息Demo
PE文件格式被组织为一个线性的数据流,它由一个MS-DOS头部开始,接着是一个是模式的程序残余以及一个PE文件标志,这之后紧接着PE文件头和可选头部。这些之后是所有的段头部,段头部之后跟随着所有的段实体。文件的结束处是一些其它的区域,其中是一些混杂的信息,包括重分配信息、符号表信息、行号信息以及字串表数据。 PE文件主要信息按顺序 IMAGE_DOS_HEADER MS-DOS M原创 2011-06-09 22:21:00 · 4088 阅读 · 2 评论 -
创建进程API CreateProcess Demo
#include #include "console.h"int main(){ PROCESS_INFORMATION pi; STARTUPINFO si; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); CHAR szSysPath[MAX_PATH]; if (GetSystemDirectory(szS原创 2011-06-06 22:22:00 · 3177 阅读 · 0 评论 -
VC win32 Application SDK创建窗口Demo
win32.h#ifndef _X_WIN32_H_#define _X_WIN32_H_BOOL InitApplication(HINSTANCE);BOOL InitInstance(HINSTANCE,int);LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);#endif win32.cpp#include原创 2011-06-06 17:03:00 · 4408 阅读 · 0 评论 -
MFC 回车(Enter) 不退出对话框方法
<br />对话框有一个单行的Edit控件,一回车对话框就退出了,怎么办?<br /> <br />重载OnOK<br /> <br />当焦点在对话框上是才退出,否则执行指定的处理步骤<br /> <br />void XXXDlg::OnOK(){ if(GetDlgItem(IDOK)==GetFocus()) { CDialog::OnOK(); } //handle enter key} <br /> <br />另外,这里给出了三种可能的解决方法:<br />ht原创 2011-04-16 21:27:00 · 11166 阅读 · 0 评论 -
win32 Application SDK窗口 WNDCLASS 自定义鼠标、图标、菜单
首先添加鼠标,图标,菜单资源,然后可以从资源ID加载 BOOL InitApplication( HINSTANCE hInstance ){ WNDCLASS wc; wc.cbClsExtra=0; wc.cbWndExtra=0; wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);; //wc.hCurs原创 2011-06-06 18:36:00 · 3938 阅读 · 0 评论 -
C++ 获取本机IP地址
bool GetLocalIP(char* ip) { //1.初始化wsa WSADATA wsaData; int ret=WSAStartup(MAKEWORD(2,2),&wsaData); if (ret!=0) { return false; } //2.获取主机名 char hostname[256]; ret=gethostname(hostname,sizeof(hostname)); if (ret==SOCKET原创 2011-05-29 09:08:00 · 99272 阅读 · 2 评论 -
winsock 错误 0x0000274d 由于目标机器积极拒绝,无法连接问题解决
<br /> <br />一段简单的Conncet代码,却总是返回 0x0000274d 错误<br /> <br />查了半天终于发现了问题。port忘记进行字节序转换了。<br /> <br />应该是addr.sin_port=htons(port);<br /> <br />问题解决了。<br /> <br />目标机器上指定的端口上并没有服务,当然会返回积极拒绝。<br /> <br />为了证实这一点,改一个再改一个错误的并不存在的端口号来试一下。<br />也是返回这个错误。<br />将服务原创 2011-04-10 13:45:00 · 10010 阅读 · 0 评论 -
C++ 获取本机全部IP地址(有不止一个IP的情况)
<br /> typedef struct tagIPInfo { char ip[30]; }IPInfo; bool GetLocalIPs(IPInfo* ips,int maxCnt,int* cnt) { //1.初始化wsa WSADATA wsaData; int ret=WSAStartup(MAKEWORD(2,2),&wsaData); if (ret!=0) { return false; } //2.获取主机原创 2011-05-29 11:38:00 · 12436 阅读 · 5 评论 -
MFC network address control使用
<br />控件和m_ip关联<br /> <br />CIPAddressCtrl m_ip.SetAddress(127,0,0,1);//初始化 可写在OnInitDialog<br /> <br /> <br />CString ip;<br />m_ip.GetWindowText(ip);//获取IP字符串<br />这个值可以直接作为inet_addr(ip)的输入<br />SOCKADDR_IN serverAddr;serverAddr.sin_family=AF_INET;se原创 2011-05-27 22:50:00 · 10922 阅读 · 0 评论 -
前导声明代替头文件依赖和交叉包含
1.头文件中使用前导声明替代交叉引用,由于前导声明只是一个符号声明,不能知道实际对象的大小,引用的对象只能是指针类型。2.源文件中包含自己的头文件。a.hclass B;class A{ A(); B* b;}; b.hclass A;class B{public: B(); A* a;}; a.cpp#include "A.h"A::A(){} b.cpp#include "B.h"B::B(){}原创 2011-05-18 20:31:00 · 10710 阅读 · 0 评论 -
带引用计数的智能指针
<br />#define DbgPrint(...) printf(__VA_ARGS__)#define DbgEnter() {DbgPrint("+%s/n",__FUNCSIG__);DbgPrint("+pointer_=0x%x,refcount_=0x%x,*refcount_=0x%x/n",pointer_,refcount_,refcount_==0?0:*refcount_);}#define DbgLeave() {DbgPrint("+pointer_=0x%x,refc原创 2011-05-11 22:26:00 · 9996 阅读 · 0 评论 -
winpcap 枚举网卡设备Demo
<br />#define HAVE_REMOTE#include "pcap.h"#include <list>#include <iostream>using namespace std;int _tmain(int argc, _TCHAR* argv[]){ pcap_if_t* alldevs; list<pcap_if_t> devices; char errbuf[PCAP_ERRBUF_SIZE]; //枚举本地计算机的网卡 if(pcap_fin原创 2011-03-10 23:24:00 · 6910 阅读 · 1 评论 -
生成COM Dll的tlb文件的两种方法
1.开始运行oleview调出OLE/COM Object Viewer.这个工具是微软提供的,在VC6中和Windows SDK中都有。找到要用的COM组件,比如说VBSrcirpt的正则表达式COM组件在:Type Libaray中的Microsoft VBScript Regular Expression V5.5中,双击打开后,保存成idl文件。然后用微软提供的另一个工具从idl生成tlb文件。开始运行cmd,调出命令行。使用命令midl XXX.idl来成成tlb文件即可。然后在VC++的工程中引原创 2011-03-08 21:18:00 · 11693 阅读 · 0 评论 -
使用WinInet从HTTP服务器下载信息--Downloading from an HTTP Server using WinInet
Downloading from an HTTP Server using WinInet使用WinInet从HTTP服务器下载信息Thu, 2004-02-26 11:45 — rogerThe WinInet functions allow an application to interactwith Gopher, FTP and HTTP servers. This article shows how to use the WinInetAPI to download from an HTT翻译 2011-04-16 22:43:00 · 10984 阅读 · 0 评论 -
cout设置16进制大写输出
cout.setf(ios::hex,ios::basefield);//设置十六进制显示数值cout.setf(ios::showbase|ios::uppercase);//设置0x头和大写原创 2011-06-08 21:52:00 · 5448 阅读 · 0 评论 -
C# Javascript引擎,如何在C#中执行现有的Javacript代码?
请下载这个Assembly。提供了.net3.5和.net4.0版本使用方法1.下载Noesis.Javascript.dll2.Add Referene 加到工程3.运行官方网站上给的Demo 4.新建Console工程CSJS后附完整代码:运行原创 2011-08-10 22:14:38 · 13564 阅读 · 2 评论 -
免费POSIX标准下载
POSIX标准起草和维护者是IEEE和Opengrouphttp://pubs.opengroup.org/ 这里可以在线查询POSIX标准文档这个页面可以打包下载http://pubs.opengroup.org/onlinepubs/009695399/dow原创 2011-09-03 17:54:41 · 25043 阅读 · 1 评论 -
C拆分字符串 sscanf vs strtok
sscanf char buf[]="port=5000"; char key[100]=""; char value[100]=""; sscanf(buf,"%[^=]=%[^\n]",key,value); printf("key=%s\n",key); pri原创 2011-09-01 22:41:49 · 10579 阅读 · 0 评论 -
数组的指针和数组元素的指针。
int arr[100]; printf("&arr[0]=%d\n",&arr[0]); printf("arr=%d\n",arr); printf("&arr=%d\n",&arr); printf("&arr[0]+1=%d\n",&arr[0]+1);原创 2011-09-01 22:51:04 · 9519 阅读 · 0 评论 -
MFC静态控件CStatic显示不出ICO图标解决
//加载NotePad.exe的图标到IDC_IMG_NOTEPAD Cstatic控件上,这段代码显示不出ico图标,原因是什么?? //是type属性设置错了,在资源视图里面,编辑CStatic控件的属性,将它的Type改为icon,即解决。 SHFILEINFO fil原创 2011-07-17 17:20:47 · 11652 阅读 · 0 评论 -
MFC 非模态,无内存泄漏对话框应该是怎么创建
//如果这个对话框通过非模态的方式被创建,由于在PostNcDestroy(对话框销毁会被调用)中使用了delete this;不会发生内存泄漏class CMessageDlg:public CDialog{public: void PostNcDestroy();};原创 2011-07-17 16:51:21 · 9510 阅读 · 0 评论 -
MFC 移动控件到指定坐标
CRect rect; GetDlgItem(IDC_IMG_NOTEPAD)->GetWindowRect(&rect);//获得空间的绝对坐标 ScreenToClient(&rect);//获得相对于主窗体的坐标 rect.OffsetRect(CS原创 2011-07-17 19:14:13 · 16346 阅读 · 0 评论 -
char/wchar_t之间的互转MultiByteToWideChar和WideCharToMultiByte的用法
C2W char->wchar_tW2C wchar_t->char注意 codpage参数选择CP_OEMCP这样中文和英文都可以成功转换,如果只要转换英文可以使用CP_ACPbool C2W(const char* str,wchar_t* wstr){int len=MultiByteToWideChar(CP_OEMCP,0,str,-1/*null terminated*/,wstr,0);return len==MultiByteToWideChar(CP_OEMCP,0,str,-原创 2011-05-06 21:25:00 · 12298 阅读 · 0 评论 -
C char/wchar_t之间的互转 多字节(MultiByte)和宽字符(Unicode)互转
wchar_t wstr[100]=L"wstr";char str[100];wcstombs(str,wstr,100);//宽字符转多字节mbstowcs(wstr,str,100);//多字节转宽字符 也可以使用:MultiByteToWideChar和WideCharToMultiByte参考:http://blog.csdn.net/iamoyjj/archiv原创 2011-06-29 20:34:00 · 4333 阅读 · 0 评论 -
[收藏]POSIX标准
POSIX--Portable Operating System Interface for Unix 一套UNIX操作系统兼容性API接口POSIX-2008 详细内容参见:http://pubs.opengroup.org/onlinepubs/9699919799/functions/contents.html这里比较关注里面有socket一章,Berkeley的POSIX版本在此有详细的说明,很有价值原创 2011-04-24 16:44:00 · 9885 阅读 · 0 评论 -
visual studio 2008 编译 filezilla
<br /><br />http://filezilla-project.org/download.php?type=client<br />这里可以下到一个3.4.0的源码<br />解压后里面会有一个src/interface文件夹,里面有interface工程,使用此工程进行编译。注意这里直接编译的话是编译不过的,会有很多错误,因为filezilla工程依赖其他一些项目:<br />可以用记事本打开build文件看一下<br />FileZilladepends on the following原创 2011-04-24 13:41:00 · 95178 阅读 · 9 评论 -
C 获取编译日期函数
<br />#include <stdio.h>#include <stdlib.h>#include <malloc.h>#include <string.h>typedef struct tagXDate{ int year; int month; int day;}XDate;bool GetCompileDate(XDate* date){ bool succeed=true; char* complieDate=(char*)malloc(str原创 2011-04-24 16:26:00 · 9655 阅读 · 0 评论 -
link error msvcprt.lib 解决
今天遇到了这个链接错误。问题的场景是我的一个C++的dll工程要引用一个lib文件。对这个lib文件中的函数进行链接的时候发生的。解决的方法是正确的设置编译选项。把lib和工程都选择为/MD。参考:http://hi.baidu.com/%CF%D0%D7%F8%B2%BB%C8%E7%D1%A7%BC%BC%CA%F5/blog/item/7b38a339d97526f914cecb1e.html原创 2011-04-23 19:03:00 · 11404 阅读 · 1 评论 -
使用template扩展已有的DDX_Text函数,使扩展能够同时支持各种数据类型的一个例子
<br />MFC提供了一组DDX_Text函数,能够支持控件和各种数据类型之间的绑定。加入我们要在已有的功能上座一些小小的修改,又希望我们的修改能够适应各种数据类型的话。应该怎样做呢?下面是一个例子。<br /> <br />下面的这个模板方法所要使用的场景是显示值和变量存储值相差一个常量系数coff的情况。显然我们希望能编写一次就能让所有DDX_Text支持的数据类型都能支持这一功能,使用template是实现这一目标的绝好方法。<br /> <br />template<typename T>vo原创 2011-02-17 23:48:00 · 7479 阅读 · 0 评论 -
C++之仿函数
仿函数形如:为类或结构体重载了()操作幅,使之表达形式与函数调用一致。typedef struct tag_Functor{ void operator()(void) { //implement function here }}Functor; 很有意思的用法,如果加入带参数的构造函数的话会更有意思它的特点在于函数的参数可以在operator中指定外还可在构造函数中指定,有两个时机。一个典型的巧妙用法在于和宏的结合VC6 实现TRACE 文件、行号,__VA_ARGS__ Wal原创 2011-02-18 00:05:00 · 8425 阅读 · 0 评论 -
SDK串口编程 正常终止 WaitCommEvent
<br />遇到一个问题,如果在一个线程中使用WaitCommEvent来处理RX接受中断的话,如果没有任何事件发生,程序将阻塞在WaitCommEvent一行,以至于无法正常终止线程。<br /> <br />解决方法:要使WaitCommEvent正常终止,需要使用OVERLAPPED模式在创建串口设备的时候(CreateFile)使用重叠IO的方式。<br /> <br />这样WaitCommEvent就会立即返回,再去Wait OVERLAPPED结构的hEvent,同时再创建一个线程终止的Eve原创 2011-02-14 23:37:00 · 8233 阅读 · 0 评论 -
CComboBox 下拉列表高度调整
CComboBox 控件的下拉列表的高度默认很小,很难看。网上查来查去终于发现如何设置。很巧妙,要在在设计视图上单击下来列表的小箭头。这时会发现出来的边框和点其它的位置是不同的。这个高度就是下拉列表的不出现滚动条的高度。把这个框拖下去一些就解决问题了.希望对和我遇到同样问题的同学有所帮助。原创 2010-12-30 21:18:00 · 4746 阅读 · 0 评论 -
VC++ TRACE Bug Trace所能接收的数据长度不能大于508字符
TRACE 是VC++下强大的打印调试函数今天在做调试的时候总是在TRACE处 ASSERT后来做了一个小测试char str[509];TRACE(str);正常TRACEchar str[509];TRACE(str);ASSERT 弹出断言错误出在 dumpout.cpp中nBuf = _vsntprintf(szBuffer, _countof(szBuffer), lpszFormat, args);//这一行返回-1// was there an error? was the expanded原创 2010-12-02 22:46:00 · 5027 阅读 · 1 评论 -
C++ 二级指针
<br />二级指针应当慎用<br /> <br />首先是由于它难于被理解,另外就是指针的任何一层为NULL所造成的后果都是严重的.<br /> <br />二级指针只有在非常需要的时候才应该去使用,比如一个函数需要返回一个指针的情况下.<br /> <br />在任何情况下,能够使用引用就要避免使用指针.原创 2010-11-27 00:20:00 · 4652 阅读 · 0 评论 -
[收藏]C/C++数组名与指针区别深层探索
根本原因在与左值和右值char a[10]=“hello”;sizeof(a);//数组名做左值,具有数组名的属性,是一个指向数组首地址的常量指针strcpy(a,"abc");//数组名做右值,退化为普通的指针原文链接: http://hi.baidu.com/%D2%C0%BD%A3%D0%F9/blog/item/7bbf36966c92f36a54fb9663.html转载 2009-11-16 15:16:00 · 4503 阅读 · 0 评论 -
Windows下使用VC++编译GNU科学计算库 GNU Scientific Library(GSL)
GNU科学计算库 GNU Scientific Library是一个跨平台的科学计算库。可以满足日常科学计算的大部分需要。它包含了矩阵运算、数值计算,傅里叶分析,小波分析、统计分析、最优化等数学需要的方方面面的知识。总之站在巨人的肩膀上才能走的更高更远!!1. 下载GNU Win32开发包http://gnuwin32.sourceforge.net/packages/g原创 2009-11-12 09:00:00 · 6126 阅读 · 0 评论 -
VC++ 高精度定时timeSetEvent和回调成员方法
Platform SDK: Windows Multimedia中的timeSetEvent函数和timeKillEvent函数可以启动和停止一个精度达到1ms的高精度定时器。原型:MMRESULT timeSetEvent( UINT uDelay, UINT uResolution, LPTIMECALLBA原创 2009-11-09 10:25:00 · 10951 阅读 · 0 评论 -
冒泡法,改进冒泡法排序和反序算法
#include int sort_bubble(int arr[],int len);int sort_bubblemod(int arr[],int len);int reverse_half(int arr[],int len);void main(){ //int num[10]={3,8,9,2,5,7,6,0,4,1}; int原创 2009-10-06 20:29:00 · 4643 阅读 · 0 评论 -
使用WinIO库实现保护模式下的IO和内存读写(_inp,_outp)
在WindowsXP等NT内核的操作系统中,#include "conio.h"中定义的端口读写函数_inp,_outp已经不能直接使用了,这是因为Window的保护模式不允许对IO直接进行直接操作。但是在工业控制领域,对IO的读写是最基本的操作,尤其是对ISA总线或并口这类固定地址的存储设备的访问,我们必须能够高效的进行IO读写来进行数据采集。这里给出的解决方案是使用http://www.i原创 2009-09-15 20:40:00 · 7579 阅读 · 4 评论