C C++
C++11中的Move語義和右值引用
摘要:
C++一直致力于生成快速的程序。不幸的是,直到C++11之前,這里一直有一個降低C++程序速度的頑癥:臨時變量的創建。有時這些臨時變量可以被編譯器優化(例如返回值優化),但是這并不總是可行的,通常這會導致高昂的對象復制成本。我說的是怎么回事呢?
閱讀全文
posted @
2016-03-15 15:49 日需博客 閱讀(615) |
評論 (0) 編輯
傳奇3.0 VC++最終正式版本源碼
摘要: 傳奇3.0 (evil’s illusion Server)
韓國正式版本 vc++ 源碼
GameServer VC++源代碼,包括地圖,腳本,人物處理,協議加密,帶數據庫,由于源碼為商業性質的,請使用者注意其版權和不要擅自公開發布和傳播源碼。
WEMADE 公司于 Delphi 版本服務器端程序后,修改為 VC++ 版本。
可用VC++ 6.0 或 VC.net 編譯;學習網絡游戲開發的朋友又一個絕好的源碼。
閱讀全文
posted @
2011-09-28 09:14 日需博客 閱讀(4609) |
評論 (2) 編輯
SQLite3 C/C++ 開發接口簡介
摘要: 1.0 總覽
SQLite3是SQLite一個全新的版本,它雖然是在SQLite 2.8.13的代碼基礎之上開發的,但是使用了和之前的版本不兼容的數據庫格式和API. SQLite3是為了滿足以下的需求而開發的:
l 支持UTF-16編碼.
l 用戶自定義的文本排序方法.
l 可以對BLOBs字段建立索引.
因此為了支持這些特性我改變了數據庫的格式,建立了一個與之前版本不兼容的3.0版. 至于其他的兼容性的改變,例如全新的API等等,都將在理論介紹之后向你說明,這樣可以使你最快的一次性擺脫兼容性問題.
閱讀全文
posted @
2011-09-21 15:12 日需博客 閱讀(1088) |
評論 (0) 編輯
修改const變量的疑問
摘要: 2個指針指向的地址和變量地址一樣,值為什么不一樣呢?疑惑。
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
const int a=10;
const int *p1=&a;
int *p2=const_cast
(p1);
if (&a==p1)
{
printf("&a==p1\n");
}
else
{
printf("&a!=p1\n"); 閱讀全文
posted @
2011-09-10 21:21 日需博客 閱讀(2230) |
評論 (7) 編輯
GDI+ for VC6 MFC
摘要: 五年前,筆者曾在C#中使用GDI+開發程序,對其頗有好感。這一段時間,在使用VC6作圖時,深切感會到使用GDI的種種不便,不比GDI+好用。沉迷于VC6的高效與輕便,不想只為了一個GDI+而被迫安裝沉甸甸的.Net,便產生了一個疑問,難道GDI+只能用于.Net中嗎?
訪問微軟的MSDN網站后,隨即解開了此謎。于是便有了此文 – 如何在VC6 MFC中使用GDI+。
閱讀全文
posted @
2011-08-23 09:10 日需博客 閱讀(2882) |
評論 (6) 編輯
ARP欺騙 C++實現
摘要: 前段時間我們學校的的網絡總是出現掉線的問題,后來說是ARP欺騙,要我們用ANTIARPSNIFFER。小弟不才,
也想搞清楚這個ARP欺騙到底是個什么東西。于是在網上查了點資料,看了點文檔。也算是DIY了一個出來,而
且可以不被ANTIARPSNIFFER發現的讓對方主機在網絡中死掉。于是把這個小東西貼出來讓大家一起把玩一下。
在下菜鳥一只,還請高手指教
參考資料:《TCP/IP詳解II:實現》,《WINPCAP 3.0 DOC》,《交換網絡中的嗅探和ARP欺騙》(一位叫RefDom
的大哥很久前寫的帖子)
閱讀全文
posted @
2011-08-19 11:55 日需博客 閱讀(4939) |
評論 (0) 編輯
Windows平臺下的內存管理
摘要: 1. Windows平臺下主要的內存管理途徑
申請
釋放
new
delete
malloc
free
CoTaskMemAlloc
CoTaskMemFree
IMalloc::alloc
IMalloc/free
GlobalAlloc
GlobalFree
LocalAlloc
LocalFree
HeapAlloc
HeapFree
VirtualAlloc
VirtualFree
閱讀全文
posted @
2011-08-15 09:21 日需博客 閱讀(484) |
評論 (0) 編輯
malloc,new,VirtualAlloc,HeapAlloc性能(速度)比較
摘要: 這里比較的VC++編譯的C++代碼中的性能
我用的是VC6.0測試的
就不介紹這幾個的用法了
我寫了一段簡單的測試代碼
測試結果是:
malloc:390
new:391
VirtualAlloc:454
HeapAlloc:47
閱讀全文
posted @
2011-08-15 09:19 日需博客 閱讀(1376) |
評論 (2) 編輯
VC++下使用ADO編寫數據庫程序
摘要: 準備:
(1)、引入ADO類
#import "c:\program files\common files\system\ado\msado15.dll"
no_namespace
rename ("EOF", "adoEOF")
(2)、初始化COM
在MFC中可以用AfxOleInit();非MFC環境中用:
CoInitialize(NULL);
CoUnInitialize();
閱讀全文
posted @
2011-08-09 14:21 日需博客 閱讀(347) |
評論 (0) 編輯
GUI程序也能使用控制臺窗口
摘要: 很多時候,調試GUI程序是很不方便的,通常的做法是使用MessageBox,但是作為一個模態窗口,它經常產生不必要的消息,比如killfocus, setfocus或者paint,從而影響調試的執行過程。當然,使用vc的調試器也不錯,但是這樣也很容易造成窗口切換從而產生干擾消息。
因此,如果能像在控制臺程序里那樣使用cin/cout對象或printf族函數,會使得調試過程方便得多。而通常,windows是不會為GUI程序產生單獨的命令行窗口的。所以我們是看不到使用標準輸入輸出流輸出的東西的。既然系統不提供,那就自己動手“造”出一個來吧!
下面是一個簡單的控制臺窗口對象,它可以為你的程序創建一個命令行窗口,并將stdout,stdin和stderr重定向到這個命令行窗口。在程序中建立一個這樣的對象之后,就可以直接使用cin/cout/*printf來操縱這個新的命令行窗口了!5 f8 I$ l4 o- b3 L, m% h
閱讀全文
posted @
2011-08-09 13:57 日需博客 閱讀(614) |
評論 (0) 編輯
位運算的用處搜集
摘要: 位運算應用口訣
清零取反要用與,某位置一可用或
若要取反和交換,輕輕松松用異或
移位運算
要點 1 它們都是雙目運算符,兩個運算分量都是整形,結果也是整形。
2 " < <" 左移:右邊空出的位上補0,左邊的位將從字頭擠掉,其值相當于乘2。
3 ">>"右移:右邊的位被擠掉。對于左邊移出的空位,如果是正數則空位補0,若為負數,可能補0或補1,這取決于所用的計算機系統。
4 ">>>"運算符,右邊的位被擠掉,對于左邊移出的空位一概補上0。
閱讀全文
posted @
2011-08-08 13:29 日需博客 閱讀(278) |
評論 (0) 編輯
介紹LuaPlus: 好用的Lua For C++擴展
摘要: LuaPlus是Lua的C++增強,也就是說,LuaPlus本身就是在Lua的源碼上進行增強得來的。用它與C++進行合作,是比較好的一個選擇。
LuaPlus目前版本為:LuaPlus for Lua 5.01 Distribution Build 1080 (February 28, 2004)。大家可以到http://luaplus.org/ 站點下載:
源碼 (http://wwhiz.com/LuaPlus/LuaPlus50_Build1081.zip)
目標碼 (http://wwhiz.com/LuaPlus/LuaPlus50_Build1081_Win32Binaries.zip)
介紹LuaPlus: 好用的Lua For C++擴展 沐楓網志
閱讀全文
posted @
2011-08-08 11:36 日需博客 閱讀(571) |
評論 (1) 編輯
json格式入門和總結
摘要: 數據交換的格式,從結構上看,所有的數據(data)最終都可以分解成三種類型:
第一種類型是標量(scalar),也就是一個單獨的字符串(string)或數字(numbers),比如"北京"這個單獨的詞。
第二種類型是序列(sequence),也就是若干個相關的數據按照一定順序并列在一起,又叫做數組(array)或列表(List),比如"北京,上海"。
第三種類型是映射(mapping),也就是一個名/值對(Name/value),即數據有一個名稱,還有一個與之相對應的值,這又稱作散列(hash)或字典(dictionary),比如"首都:北京"。
閱讀全文
posted @
2011-08-08 11:07 日需博客 閱讀(418) |
評論 (0) 編輯
修改IAT實現本進程API HOOK
摘要: //修改IAT實現本進程API HOOK
//coded by xicao
//QQ:327062448
//E-MAIL:xicao54007@sina.com
#include
#include //ImageDirectoryEntryToData
#pragma comment(lib,"imagehlp.lib")
/************************************************************/
char *szModName = NULL ;
char *szHacked = "不好意思hook到了!" ;
DWORD dwHookFun ;
DWORD dwHookApiAddr;
PIMAGE_IMPORT_DESCRIPTOR pImportDesc ;
PIMAGE_THUNK_DATA32 pThunk;
U 閱讀全文
posted @
2011-08-08 11:03 日需博客 閱讀(1474) |
評論 (0) 編輯
經典編程書籍(C++, 網絡, Windows, Linux)
摘要: 兩年前就給自己列出了一個讀書清單,但進展緩慢,看的經典書籍仍然寥寥可數,慚愧中......
現在將這個書單重新修改,一方面鞭策自己學習,另一方面也表達對大牛們有如滔滔江水般的敬仰之意。
書單中列舉的都是相關領域的經典書籍,必讀之作。此書單的編輯參考了很多網站,包括一些名家的推薦,例如侯捷,孟巖,榮耀,潘愛民等等,在此也向這些前輩表示感謝。^_^
閱讀全文
posted @
2011-08-08 10:59 日需博客 閱讀(596) |
評論 (0) 編輯
LPTSTR、LPCSTR、LPCTSTR、LPSTR的來源及意義
摘要: UNICODE:它是用兩個字節表示一個字符的方法。比如字符'A'在ASCII下面是一個字符,可'A'在UNICODE下面是兩個字符,高字符用0填充,而且漢字'程'在ASCII下面是兩個字節,而在UNICODE下仍舊是兩個字節。UNICODE的用處就是定長表示世界文字,據統計,用兩個字節可以編碼現存的所有文字而沒有二義。
MBCS,它是多字節字符集,它是不定長表示世界文字的編碼。MBCS表示英文字母時就和ASCII一樣(這也是我們容易把MBCS和ASCII搞混的原因),但表示其他文字時就需要用多字節。
WINDOWS下面的程序設計可以支持MBCS和UNICODE兩種編碼的字符串,具體用那種就看你定義了MBCS宏還是UNICODE宏。MBCS宏對應的字符串指針是char*也就是LPSTR,UNICODE對應的指針是unsigned short*也就是LPWSTR,為了寫程序方便微軟定義了類型LPTSTR,在MBCS下他就是char*, 在UNICODE下它是unsigned char*,這樣你就可以重定義一個宏進行不同字符集的轉換了。
閱讀全文
posted @
2011-08-08 10:58 日需博客 閱讀(624) |
評論 (0) 編輯
使用KeepAlive檢測網絡異常
摘要: #include "netinet/tcp.h"
int keepAlive = 1; //設定KeepAlive
int keepIdle = 30; //開始首次KeepAlive探測前的TCP空閉時間
int keepInterval = 30; //兩次KeepAlive探測間的時間間隔
int keepCount = 3; //判定斷開前的KeepAlive探測次數
if(setsockopt(sockfd,SOL_SOCKET,SO_KEEPALIVE,(void*)&keepAlive,sizeof(keepAlive)) == -1)
{
printf("Socket Option setting(SO_KEEPALIVE) fail !\n");
return FALSE;
}
if(setsockopt(sockfd,SOL_TCP,TCP_KEEPIDLE,(void *)&ke
閱讀全文
posted @
2011-08-08 10:53 日需博客 閱讀(551) |
評論 (0) 編輯
Crypto++入門學習筆記(DES、AES、RSA、SHA-256)
摘要: 背景(只是個人感想,技術上不對后面的內容構成知識性障礙,可以skip):
最近,基于某些原因和需要,筆者需要去了解一下Crypto++庫,然后對一些數據進行一些加密解密的操作。
筆者之前沒接觸過任何加密解密方面的知識(當然,把每個字符的ASCII值加1之流對明文進行加密的“趣事”還是干過的,當時還很樂在其中。),甚至一開始連Crypto++的名字都沒有聽過,被BS了之后,就開始了Crypto++的入門探索過程。
最初,大概知道了要了解兩大類算法中的幾個算法——對稱加密算法:DES、AES(后來因為人品好的緣故也了解了下非對稱加密算法RSA,后文會詳述何謂“人品好”);散列算法(需要通過Hash運算):SHA-256。
起初,筆者以為這樣的知名算法在網上應該有很多現成的例子。筆者比較懶,對于自己不熟悉的東西,總希望找捷徑,直接找別人現(在已經寫)成可(編譯運)行的代碼然后施展ctrl + C,ctrl + V算法(咳,什么算法,是大法!?。。?
However,發覺網上的例子不是稀缺,就是只有代碼沒有解釋。筆者覺得很難忍受這樣的“莫名其妙”(奇怪的
閱讀全文
posted @
2011-08-05 16:37 日需博客 閱讀(1807) |
評論 (0) 編輯
Crypto++ 的使用方法
摘要: 從官方網下載的Crypto++庫是開源的,只有源文件和幾個可以生成lib、dll的工程,以及一個使用的例子工程,因此希望生成自己建的工程能使用的SDK。
1.編譯鏈接生成cryptlib.lib
打開cryptest.sln,分別在Debug模式和Release模式下編譯鏈接cryptlib工程,成功后會在cryptopp54\\Win32\\output\\debug和cryptopp54\\Win32\\output\\release下生成cryptlib.lib文件。作者當時用的是Crypto++ 5.4版本。
Build時方法是,右擊Solution Explorer中的cryptlib工程,單擊build。第一次時它會報錯說“d:\\cryptopp54\\adler32.cpp(3) : fatal error C1033: cannot open program database ’d:\\cryptopp54\\win32\\cryptlib\\debug\\vc80.idb’”,沒關系,按這樣再build一次,就
閱讀全文
posted @
2011-08-05 16:24 日需博客 閱讀(5293) |
評論 (0) 編輯
C++重載operator的示例
摘要: 以下示例中定義了一個class test, 重載了<, +, +=, =, ==, <<, >>等符號:
#include
#include
using namespace std;
class test{
public:
int v;
/*構造函數*/
test():v(0){}
test(const int &a):v(a){}
test(const test &t1):v(t1.v){}
/*以下重載小于號 < */
//比較兩個對象的大小
bool operator<(const test &t1) const{
return (v < t1.v);
} 閱讀全文
posted @
2011-08-04 14:35 日需博客 閱讀(697) |
評論 (0) 編輯
Windows完成端口與Linux epoll技術簡介
摘要: WINDOWS完成端口編程
1、基本概念
2、WINDOWS完成端口的特點
3、完成端口(Completion Ports )相關數據結構和創建
4、完成端口線程的工作原理
5、Windows完成端口的實例代碼
Linux的EPoll模型
1、為什么select落后
2、內核中提高I/O性能的新方法epoll
3、epoll的優點
4、epoll的工作模式
5、epoll的使用方法
6、Linux下EPOll編程實例
總結
閱讀全文
posted @
2011-08-04 13:49 日需博客 閱讀(374) |
評論 (0) 編輯
C++類型轉換總結
摘要: C風格的強制類型轉換(Type Cast)很簡單,不管什么類型的轉換統統是:
TYPE b = (TYPE)a。
C++風格的類型轉換提供了4種類型轉換操作符來應對不同場合的應用。
const_cast,字面上理解就是去const屬性。
static_cast,命名上理解是靜態類型轉換。如int轉換成char。
dynamic_cast,命名上理解是動態類型轉換。如子類和父類之間的多態類型轉換。
reinterpreter_cast,僅僅重新解釋類型,但沒有進行二進制的轉換。
4種類型轉換的格式,如:TYPE B = static_cast(TYPE)(a)。
閱讀全文
posted @
2011-08-03 13:57 日需博客 閱讀(255) |
評論 (0) 編輯
Windows開機登錄認證與Gina DLL
摘要: Windows的開機密碼認證模塊一般是由Gina DLL完成的。在NT/2000中交互式的登陸支持是由WinLogon調用GINA DLL實現的,GINA DLL提供了一個交互式的界面為用戶登陸提供認證請求。
閱讀全文
posted @
2011-08-03 13:41 日需博客 閱讀(1341) |
評論 (0) 編輯
Kompex SQLite Wrapper for C++ - Examples
摘要: Here you can see some examples.
It shows a part of the functionality of the wrapper and how you can use it.
You can find more examples in the example application (contained in download package).
1. open a database and create a statement instance for sql queries/statements
// open database
Kompex::SQLiteDatabase *pDatabase = new Kompex::SQLiteDatabase("test.db", SQLITE_OPEN_READWRITE, 0);
// create statement instance for sql queries/statements
Kompex::SQLite
閱讀全文
posted @
2011-08-02 14:12 日需博客 閱讀(1763) |
評論 (1) 編輯