锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
涓涓綉鍙嬬殑鎻愰棶錛屾彁閱掓湁蹇呰瀵筗ingdowsXP鐨?#8220;Regsvr32”鍛戒護(hù)浣滀竴綆瑕佷粙緇嶁斺?/font>
“Regsvr32.exe”鍛戒護(hù)鏄敤鏉ュ“ActiveX鎺т歡”榪涜娉ㄥ唽鐨勩?/font>
Regsvr32鍛戒護(hù)鏍煎紡
/u 鍗歌澆ActiveX鎺т歡
/s 娉ㄥ唽鎴愬姛鍚庝笉鏄劇ず鎿嶄綔鎴愬姛淇℃伅妗?br>/c 鎺у埗鍙拌緭鍑?br>/I 璋冪敤DllInstall瀹夎鍑芥暟騫跺皢鍙夌殑鍙傛暟[cmdline]浼犵粰瀹冿紝褰撲嬌鐢?/u鏃惰皟鐢ㄥ嵏杞藉嚱鏁?/font>
Regsvr32涓昏鍔熻兘
A銆佷慨澶?IE 嫻忚鍣?/font>
濡傛灉鍙戠幇IE涓嶈兘鎵撳紑鏂扮殑紿楀彛錛岀敤”榧犳爣宸﹂敭“鐐瑰嚮瓚呴摼鎺ユ病鏈変換浣曞弽搴旓紝鐢ㄩ紶鏍囧彸閿偣鍑昏秴閾炬帴錛屽湪寮瑰嚭鐨勮彍鍗曚腑閫夋嫨“鍦ㄦ柊紿楀彛鎵撳紑”涔熸病鏈変換浣曞弽搴斺斺?br> 1銆佸崟鍑?#8220;寮濮?->榪愯”錛屽湪“榪愯”紿楀彛涓紝杈撳叆“regsvr32 actxprxy.dll”錛岀劧鍚?#8220;紜畾”錛屾帴鐫浼?xì)鍑虹庮C竴涓俊鎭璇濇“DllRegisterServer in actxprxy.dll succeeded”錛屽啀嬈$偣鍑?#8220;紜畾”錛?br> 2銆佸啀嬈℃墦寮“榪愯”紿楀彛錛岃緭鍏?#8220;regsvr32 shdocvw.dll”錛屽崟鍑?#8220;紜畾”錛?br> 3銆侀噸鏂板惎鍔╓indows緋葷粺錛岃繍琛孖E錛屽氨浼?xì)鍙戠幇鈥斺擮K浜嗐?br>
B銆佸嵏杞芥棤鐢?#8220;楦¤倠”
Windows XP鑷甫ZIP鍔熻兘錛屽崰鐢ㄤ簡寰堝緋葷粺璧勬簮錛屽叾鍔熻兘榪樹笉濡傜涓夋柟瑙e帇緙╄蔣浠躲傚瑕佸嵏杞藉畠鈥斺?br> 鐐瑰嚮“寮濮?#8594;榪愯”錛屽湪榪愯瀵硅瘽妗嗕腑杈撳叆“regsvr32 /u zipfldr.dll”錛屽崟鍑?#8220;紜畾”鍚庯紝寮瑰嚭鍗歌澆鎴愬姛淇℃伅妗嗭紝灝卞畬鎴愬嵏杞絑IP鍔熻兘銆傛仮澶峑IP鍔熻兘錛岃緭鍏?#8220;regsvr32 zipfldr.dll”鍗沖彲銆?br>
C銆侀槻鑼冭剼鏈梾姣?/font>
褰撳墠宓屽湪緗戦〉涓殑鑴氭湰鐥呮瘨寰堟槸鍘夊銆傚緢澶氳剼鏈梾姣掔殑澶嶅埗銆佷紶鎾兘紱諱笉寮“FSO瀵硅薄錛團(tuán)ile System Object錛?#8221;錛屽洜姝ょ鐢?#8220;File System Object”灝辮兘鏈夋晥鍦版帶鍒惰剼鏈梾姣掔殑浼犳挱銆傛柟娉曗斺?br> 鍗曞嚮“寮濮?->榪愯”錛屽湪“榪愯”紿楀彛涓紝杈撳叆”regsvr32 /u scrrun.dll"錛屽氨鍙互紱佺敤FSO瀵硅薄銆傞渶瑕佷嬌鐢‵SO瀵硅薄鏃訛紝杈撳叆“regsvr32 scrrun.dll ”鍗沖彲銆?/font>
涓轟簡寤虹珛欏圭洰錛岃閫夋嫨Win32 鎺у埗鍙伴」鐩紙Win32 Console Application錛夛紝騫朵笖鍦ㄥ簲鐢ㄧ▼搴忚緗爣絳撅紙the advanced tab錛変笂錛岄夋嫨DLL鍜岀┖欏圭洰閫夐」銆侱LLs鍙兘騫朵笉濡備綘鎯沖儚鐨勯偅鏍烽毦銆傞鍏堝啓浣犵殑澶存枃浠訛紙header file錛夛紱縐頒負(fù)DLLTutorial.h銆傝繖涓枃浠朵笌鍏跺畠澶存枃浠朵竴鏍鳳紝鍏朵腑鍙槸涓浜涘嚱鏁扮殑鍘熷瀷銆?br>
#ifndef _DLL_TUTORIAL_H_
#define _DLL_TUTORIAL_H_
#include <iostream> #if defined DLL_EXPORT
#define DECLDIR __declspec(dllexport)
#else
#define DECLDIR __declspec(dllimport)
#endifextern "C"
{
DECLDIR int Add( int a, int b );
DECLDIR void Function( void );
}
#endif
鍓嶉潰涓よ鎸囩ず緙栬瘧鍣ㄥ彧鍖呭惈榪欎釜鏂囦歡涓嬈°俥xtern "C"鍛婅瘔緙栬瘧鍣ㄨ閮ㄥ垎鍙互鍦–/C++涓嬌鐢ㄣ?/p>
鍦╒C++涓繖閲屾湁涓や釜鏂規(guī)硶鏉ュ鍑哄嚱鏁幫細(xì)
1銆佷嬌鐢╛_declspec錛屼竴涓狹icrosoft瀹氫箟鐨勫叧閿瓧銆?/p>
2銆佸垱寤轟竴涓ā鍧楀畾涔夋枃浠?Module-Definition File鍗?DEF)銆傜涓縐嶆柟娉曠◢紼嶆瘮絎簩縐嶆柟娉曠畝鍗曚簺錛屼絾涓ょ閮藉伐浣滃緱寰堝ソ銆?/p>
__declspec(dllexport)瀵煎嚭鍑芥暟絎﹀彿鍒板湪浣犵殑DLL涓殑涓涓瓨鍌ㄧ被銆傚綋涓嬮潰涓琛岃瀹氫箟鏃舵垜瀹氫箟DECLDIR鏉ヨ繍琛岃繖涓嚱鏁幫紝
#define DLL_EXPORT鍚屾椂涔熷鍏ュ嚱鏁板鏋滀笅闈竴琛?
#define DLL_EXPORT
娌℃湁鍦ㄦ簮鏂囦歡涓嚭鐜般傚湪姝ゆ儏鍐典笅錛屼綘灝嗗鍑哄嚱鏁癆dd錛坕nt a, int b)鍜孎unction()銆?/p>
鐜板湪錛屼綘闇瑕佸啓涓涓皢瑕佺О涓篋LLTutorial.cpp鐨勬簮鏂囦歡銆?br>
#include <iostream>榪欓噷浣犲畾涔変簡錛圖LL涓殑錛夋墍鏈夊嚱鏁般侷nt Add(int a, int b)鍙畝鍗曞湴灝嗕袱涓暟鐩稿姞鑰寁oid Function(void)鍙槸鍦ㄤ綘鐨凞LL琚皟鐢ㄦ椂錛堝皢淇℃伅錛夐氱煡浣犮傚湪鎴戝儚浣犲睍紺哄浣曚嬌鐢―LL鍓嶏紝鎴戞兂鍛婅瘔浣犱竴浜涘叧浜庢ā鍧楀畾涔夋枃浠訛紙.def錛夌殑鍐呭銆?
#include "DLL_Tutorial.h"#define DLL_EXPORT extern "C"
{
DECLDIR int Add( int a, int b )
{
return( a + b );
} DECLDIR void Function( void )
{
std::cout << "DLL Called!" << std::endl;
} }
妯″潡瀹氫箟鏂囦歡錛?def錛?/strong>
妯″潡瀹氫箟鏂囦歡鏄竴涓湁鐫.def鏂囦歡鎵╁睍鍚嶇殑鏂囨湰鏂囦歡銆傚畠琚敤浜庡鍑轟竴涓狣LL鐨勫嚱鏁幫紝鍜宊_declspec(dllexport)寰堢浉浼鹼紝浣嗘槸.def鏂囦歡騫朵笉鏄疢icrosoft瀹氫箟鐨勩備竴涓?def鏂囦歡涓彧鏈変袱涓繀闇鐨勯儴鍒嗭細(xì)LIBRARY 鍜?EXPORTS銆傝鎴戜滑鍏堢湅涓涓熀鏈殑.def鏂囦歡紼嶅悗鎴戝皢瑙f瀽涔嬨?br>
LIBRARY dll_tutorial
DESCRIPTION "our simple DLL"
EXPORTS
Add @1
Function @2
絎竴琛岋紝''LIBRARY''鏄竴涓繀闇鐨勯儴鍒嗐傚畠鍛婅瘔閾炬帴鍣紙linker錛夊浣曞懡鍚嶄綘鐨凞LL銆備笅闈㈣鏍囪瘑涓?'DESCRIPTION''鐨勯儴鍒嗗茍涓嶆槸蹇呴渶鐨勶紝浣嗘槸鎴戝枩嬈㈡妸瀹冩斁榪涘幓銆傝璇彞灝嗗瓧絎︿覆鍐欏叆 .rdata 鑺俒鎹?MSDN]錛屽畠鍛婅瘔浜轟滑璋佸彲鑳戒嬌鐢ㄨ繖涓狣LL錛岃繖涓狣LL鍋氫粈涔堟垨瀹冧負(fù)浜嗕粈涔堬紙瀛樺湪錛夈傚啀涓嬮潰鐨勯儴鍒嗘爣璇嗕負(fù)''EXPORTS''鏄彟涓涓繀闇鐨勯儴鍒嗭紱榪欎釜閮ㄥ垎浣垮緱璇ュ嚱鏁板彲浠ヨ鍏跺畠搴旂敤紼嬪簭璁塊棶鍒板茍涓斿畠鍒涘緩涓涓鍏ュ簱銆傚綋浣犵敓鎴愯繖涓」鐩椂錛屼笉浠呮槸涓涓?dll鏂囦歡琚垱寤猴紝鑰屼笖涓涓枃浠舵墿灞曞悕涓?lib鐨勫鍑哄簱涔熻鍒涘緩浜嗐傞櫎浜嗗墠闈㈢殑閮ㄥ垎浠ュ錛岃繖閲岃繕鏈夊叾瀹冨洓涓儴鍒嗘爣璇嗕負(fù)錛歂AME, STACKSIZE, SECTIONS, 鍜?VERSION銆傛垜灝嗕笉鍐嶅湪鏈枃涓秹鍙?qiáng)杩欎簺鍐呭锛屼絾鏄鏋滀綘鍦↖nternet涓婃悳绱紝鎴戞兂浣犲皢鎵懼埌涓浜涗笢瑗匡紙璇戞敞錛?MSDN2003涓婂妯℃澘瀹氫箟鏂囦歡鍚勯儴鍒嗗唴瀹規(guī)湁璇﹀敖瑙i噴錛岃鍙傞槄錛夈傚彟澶栵紝涓涓垎鍙?;)寮濮嬩竴涓敞瑙o紝濡傚悓''//''鍦–++涓竴鏍楓?/p>
鐜板湪浣犲凡緇忓垱寤轟簡浣犵殑DLL錛屼綘闇瑕佸涔?fàn)濡備綍鍦ㄤ竴涓簲鐢ㄧ▼搴忎腑浣跨敤瀹冧簡銆傚綋榪欎釜DLL琚敓鎴愬悗錛屽畠鍒涘緩浜嗕竴涓?dll鏂囦歡鍜屼竴涓?lib鏂囦歡錛涜繖涓や釜閮芥槸浣犻渶瑕佺殑銆?/p>
闅愬紡閾炬帴
榪欓噷鏈変袱涓柟娉曟潵杞藉叆涓涓狣LL錛涗竴涓柟娉曟槸鎹峰緞鍙︿竴涓垯鐩告瘮瑕佸鏉備簺銆傛嵎寰勬槸鍙摼鎺ュ埌浣?lib 鏂囦歡騫跺皢.dll鏂囦歡緗叆浣犵殑鏂伴」鐩殑璺緞涓幓銆傚洜姝わ紝鍒涘緩涓涓柊鐨勭┖鐨刉in32鎺у埗鍙伴」鐩茍娣誨姞涓涓簮鏂囦歡銆傚皢浣犲仛鐨凞LL鏀懼叆浣犵殑鏂伴」鐩浉鍚岀殑鐩綍涓嬨?/p>
#include <iostream>
#include <DLLTutorial.h>int main()
{
Function();
std::cout << Add(32, 58) << "\n";
return(1);
}
浣犲繀闇瑕侀摼鎺ュ埌DLLTutorial.lib鏂囦歡銆傛垜鍦ㄩ」鐩睘鎬т腑璁劇疆浜嗭紝浣嗘槸浣犲彲鑳戒細(xì)鐢ㄤ笅闈㈢殑璇彞浠f浛錛?/p>
#pragma comment(lib, "DLLTutorial.lib")
璇鋒敞鎰忔垜璁╃紪璇戝櫒鏉ユ煡鐪嬫垜鐨凞LL鏂囦歡澶瑰凡鑾峰緱.lib鏂囦歡鍚屾椂璁╁畠欏轟究鐪嬩笅璇ョ洰褰曚腑鐨凞LL澶存枃浠躲傚鏋滀綘涓嶆兂榪欎箞鍋氾紝浣犲彲浠ユ繪槸鎶婁粬浠斁鍏ヤ綘鐨勬柊欏圭洰鐨勭洰褰曚腑騫朵嬌鐢?"錛堝紩鍙鳳級(jí)鑰屼笉鏄?lt;>銆傝繖灝辨槸杞藉叆涓涓狣LL鐨勭畝鍗曟柟娉曘?/p>
鏄劇ず閾炬帴
闅劇偣鐨勫姞杞紻LL鐨勬柟娉曟槸鏈夌◢寰湁鐐瑰鏉傜殑銆備綘灝嗛渶瑕佸嚱鏁版寚閽堝拰涓浜沇indows鍑芥暟銆備絾鏄紝閫氳繃榪欑杞藉叆DLLs鐨勬柟娉曪紝浣犱笉闇瑕丏LL鐨?lib鎴栧ご鏂囦歡錛岃屽彧闇瑕丏LL銆備笅闈㈠垪鍑轟竴浜涗唬鐮侊紝鎴戠◢鍚庡皢瑙f瀽涔嬨?/p>
#include <iostream>
#include <windows.h>
typedef int (*AddFunc)(int,int);
typedef void (*FunctionFunc)();int main()
_AddFunc = (AddFunc)GetProcAddress(hInstLibrary, "Add");
{
AddFunc _AddFunc;
FunctionFunc _FunctionFunc;
HINSTANCE hInstLibrary = LoadLibrary("DLL_Tutorial.dll"); if (hInstLibrary == NULL)
{
FreeLibrary(hInstLibrary);
}
_FunctionFunc = (FunctionFunc)GetProcAddress(hInstLibrary, "Function"); if ((_AddFunc == NULL) || (_FunctionFunc == NULL))
{
FreeLibrary(hInstLibrary);
} std::cout << _AddFunc(23, 43) << std::endl;
_FunctionFunc(); std::cin.get(); FreeLibrary(hInstLibrary); return(1);
}
棣栧厛浣犱細(xì)娉ㄦ剰鍒幫細(xì)榪欓噷鍖呮嫭榪涗簡鏂囦歡“windows.h”鍚屾椂縐昏蛋浜?#8220;DLL_Tutorial.h”銆傚師鍥犲緢綆鍗曪細(xì)鍥犱負(fù)windows.h鍖呭惈浜嗕竴浜沇indows鍑芥暟錛屽綋鐒朵綘鐜板湪灝嗗彧闇瑕佸叾涓嚑涓屽凡銆傚畠涔熷寘鍚簡涓浜涘皢浼?xì)鐢ㄥ埌鐨刉indows鐗瑰畾鍙橀噺銆備綘鍙互鍘繪帀DLL鐨勫ご鏂囦歡錛圖LL_Tutorial.h錛夊洜涓猴紞濡傛垜鍓嶉潰鎵璇達(dá)紞褰撲綘浣跨敤榪欎釜鏂規(guī)硶杞藉叆DLL鏃朵綘騫朵笉闇瑕佸畠銆?/p>
涓嬮潰浣犱細(xì)鐪嬪埌錛氫互涓嬮潰褰㈠紡鐨勪竴灝忓潡鍙ょ伒綺炬殑浠g爜:
typedef int (*AddFunc)(int,int);
typedef void (*FunctionFunc)();
榪欐槸鍑芥暟鎸囬拡銆傚洜涓鴻繖鏄竴涓叧浜嶥LL鐨勮嚜瀛︽寚鍗楋紝娣卞叆鎺㈢┒鍑芥暟鎸囬拡瓚呭嚭浜嗘湰鎸囧崡鐨勮寖鍥達(dá)紱鍥犳錛岀幇鍦ㄦ垜浠彧鎶婂畠浠綋浣淒LL鍖呭惈鐨勫嚱鏁扮殑鍒悕銆傛垜鍠滄鍦ㄥ熬閮ㄧ敤“Func”鍛藉悕涔嬨?int,int)閮ㄥ垎鏄繖涓嚱鏁扮殑鍙傛暟閮ㄥ垎錛屾瘮濡傦紝Add鍑芥暟瑕佽幏寰椾袱涓暣鏁幫紱鍥犳錛屼綘闇瑕佸畠浠紙璇戞敞錛氭寚(int,int)閮ㄥ垎錛変綔涓哄嚱鏁版寚閽堢殑鍙傛暟銆侳unction鍑芥暟娌℃湁鍙傛暟錛屽洜姝や綘璁╁畠涓虹┖銆俶ain()閮ㄥ垎涓殑鍓嶉潰涓よ鏄0鏄庡嚱鏁版寚閽堜互浣垮緱浣犲彲浠ヨ涓哄畠浠瓑鍚屼簬DLL鍐呴儴鐨勫嚱鏁般傛垜鍙槸鍠滄棰勫厛瀹氫箟瀹冧滑銆?/p>
涓涓狧INSTANCE鏄竴涓猈indows鏁版嵁綾誨瀷錛氭槸涓涓疄渚嬬殑鍙ユ焺錛涘湪姝ゆ儏鍐典笅錛岃繖涓疄渚嬪皢鏄繖涓狣LL銆備綘鍙互閫氳繃浣跨敤鍑芥暟LoadLibrary()鑾峰緱DLL鐨勫疄渚嬶紝瀹冭幏寰椾竴涓悕縐頒綔涓哄弬鏁般傚湪璋冪敤LoadLibrary鍑芥暟鍚庯紝浣犲繀闇鏌ョ湅涓涓嬪嚱鏁拌繑鍥炴槸鍚︽垚鍔熴備綘鍙互閫氳繃媯(gè)鏌INSTANCE鏄惁絳変簬NULL錛堝湪Windows.h涓畾涔変負(fù)0鎴朩indows.h鍖呭惈鐨勪竴涓ご鏂囦歡錛夋潵鏌ョ湅鍏舵槸鍚︽垚鍔熴傚鏋滃叾絳変簬NULL錛岃鍙ユ焺灝嗘槸鏃犳晥鐨勶紝騫朵笖浣犲繀闇閲婃斁榪欎釜搴撱傛崲鍙ヨ瘽璇達(dá)紝浣犲繀闇閲婃斁DLL鑾峰緱鐨勫唴瀛樸傚鏋滃嚱鏁拌繑鍥炴垚鍔燂紝浣犵殑HINSTANCE灝卞寘鍚簡鎸囧悜DLL鐨勫彞鏌勩?/p>
涓鏃︿綘鑾峰緱浜嗘寚鍚慏LL鐨勫彞鏌勶紝浣犵幇鍦ㄥ彲浠ヤ粠DLL涓噸鏂拌幏寰楀嚱鏁般備負(fù)浜嗚繖鏍蜂綔錛屼綘蹇呴』浣跨敤鍑芥暟GetProcAddress()錛屽畠?yōu)畣DLL鐨勫彞鏌勶紙浣犲彲浠ヤ嬌鐢℉INSTANCE錛夊拰鍑芥暟鐨勫悕縐頒綔涓哄弬鏁般備綘鍙互璁╁嚱鏁版寚閽堣幏寰楃敱GetProcAddress()榪斿洖鐨勫鹼紝鍚屾椂浣犲繀闇灝咷etProcAddress()杞崲涓洪偅涓嚱鏁板畾涔夌殑鍑芥暟鎸囬拡銆備婦涓緥瀛愶紝瀵逛簬Add()鍑芥暟錛屼綘蹇呴渶灝咷etProcAddress()杞崲涓篈ddFunc錛涜繖灝辨槸瀹冪煡閬撳弬鏁板強(qiáng)榪斿洖鍊肩殑鍘熷洜銆傜幇鍦紝鏈濂藉厛紜畾鍑芥暟鎸囬拡鏄惁絳変簬NULL浠ュ強(qiáng)瀹冧滑鎷ユ湁DLL鐨勫嚱鏁般傝繖鍙槸涓涓畝鍗曠殑if璇彞錛涘鏋滃叾涓竴涓瓑浜嶯ULL錛屼綘蹇呴渶濡傚墠鎵榪伴噴鏀懼簱銆?/p>
涓鏃﹀嚱鏁版寚閽堟嫢鏈塂LL鐨勫嚱鏁幫紝浣犵幇鍦ㄥ氨鍙互浣跨敤瀹冧滑浜嗭紝浣嗘槸榪欓噷鏈変竴涓渶瑕佹敞鎰忕殑鍦版柟錛氫綘涓嶈兘浣跨敤鍑芥暟鐨勫疄闄呭悕縐幫紱浣犲繀闇浣跨敤鍑芥暟鎸囬拡鏉ヨ皟鐢ㄥ畠浠傚湪閭d互鍚庯紝鎵鏈変綘闇瑕佸仛鐨勬槸閲婃斁搴撳姝よ屽凡銆?/p>
鐜板湪浣犵煡閬撲簡DLL鐨勪竴浜涘熀鏈煡璇嗐備綘鐭ラ亾濡備綍鍒涘緩瀹冧滑錛屼綘涔熺煡閬撳浣曠敤涓ょ涓嶅悓鐨勬柟娉曢摼鎺ュ畠浠傝繖閲屼粛鐒舵湁鏇村鐨勪笢瑗塊渶瑕佹垜浠涔?fàn)锛屼絾鎴戞妸瀹冧滑鐣櫨l欎綘浠嚜宸辨帰绱簡鍜屾洿媯掔殑浣滆呮潵鍐欎簡銆?/p>
渚嬪瓙錛?br>寤虹珛涓涓┖鐨刣ll宸ョ▼錛?br>鏂板緩.h鏂囦歡
#ifdef DLL1_API
#else
#define DLL1_API _declspec(dllimport)
#endif
extern "C" DLL1_API int add(int a, int b);
extern "C" DLL1_API int subtract(int a, int b);
class DLL1_API Point
{
public:
void outPoint(int x, int y);
};
鏂板緩.cpp鏂囦歡
#define DLL1_API _declspec(dllexport)
#include "Dll1.h"
#include <Windows.h>
#include <stdio.h>
int add(int a, int b)
{
return a + b;
}
int subtract(int a, int b)
{
return a - b;
}
void Point::outPoint(int x, int y)
{
HWND hwnd=GetForegroundWindow();
HDC hdc=GetDC(hwnd);
TCHAR buf[20];
memset(buf,0,20);
wsprintf(buf,L"x=%d,y=%d",x,y);
TextOut(hdc,0,0,buf,wcslen(buf));
ReleaseDC(hwnd,hdc);
}
緙栬瘧宸ョ▼錛屾妸鐢熸垚鐨刣ll錛屽拰.lib鏀懼埌搴旂敤鐨勫伐紼嬩笅銆?br>#include "Dll1.h"
#pragma comment(lib, "TestDll.lib")
搴旂敤宸ョ▼鍜屽鍏ュ伐紼嬨?/p>
鍏抽敭瀛楋細(xì)澶栨寕錛岃繛榪炵湅
寮曡█錛?/strong>
銆銆鏈榪戝湪鏈嬪弸閭f悶浜嗕釜榪炶繛鐪嬫父鎴忔潵鐜╃帺錛岃寰楄繕涓嶉敊錛屼笉榪囧氨鏄帺涓嶈繃浜哄錛?璁板緱浠ュ墠鍦ㄤ竴鏈功涓婄湅鍒拌繃榪炶繛鐪嬪鎸傜殑鍋氭硶錛岃繕姣旇緝綆鍗曪紝鑷繁榪樻病蹇橈紝浜庢槸涓嬪畾鍐沖績錛?鑷繁鍋氫竴涓紝鐒跺悗……銆傚搱鍝堬紝鐪嬭皝榪樻墦寰楄繃鎴戙?br>銆銆濂戒簡錛岀幇鍦ㄨ涓嬪鎸傜殑鍏蜂綋鎬濊礬錛堟垜鍋囪澶у閮界煡閬撹繛榪炵湅娓告垙鐨勮鍒欙級(jí)銆?榪欎釜澶栨寕鏃犻潪灝辨槸瑕佺數(shù)鑴戞潵甯垜闂ㄦ壘鍒扮浉鍚岀殑鍥劇墖騫剁湅浠栦滑鏄惁榪為氥傝繖閲屾湁涓や釜闂錛屼竴涓?灝辨槸鎬庝箞璁╃數(shù)鑴戝尯鍒笉鍚岀殑鍥劇墖鍛紵榪欓噷鏈変釜綆鍗曠殑鍔炴硶錛屽氨鏄湪姣忎釜鍥劇墖涓彇5涓偣錛岀劧鍚?灝嗚繖5涓偣鐨勫儚绱犲肩浉鍔犲仛涓鴻繖縐嶅浘鐗囩殑ID錛岃繖鏍蜂竴鑸笉浼?xì)鍑虹幇閲嶅鐨処D錛屽涓嬪浘鎵紺轟緥錛?/p>

銆銆榪欐牱絎竴涓棶棰樺氨瑙e喅浜嗭紝絎簩涓棶棰樺氨鏄庝箞鍒ゆ柇瀹冧滑鏄惁榪為氾紝榪欎釜鎮(zhèn)ㄧ爺絀朵笅浠g爜灝監(jiān)K鎷夈?濂戒簡鐜板湪鎴戜滑鍋囪絎簩涓棶棰樺凡緇忚В鍐充簡錛岄偅涔堬紝鎴戜滑鍙渶瑕佸線榪炶繛鐪嬫父鎴忕殑紿楀彛鐨勪袱涓浉鍚屼笖榪為氱殑鍥劇墖鐨勫湴鏂瑰彂閫佷袱涓紶鏍囧崟鍑葷殑娑堟伅 灝監(jiān)K浜嗘垨鑰呭湪浠栦滑涓婇潰鐢諱袱涓湀鎻愮ず浠ヤ笅銆備笅闈㈡槸紼嬪簭榪愯鏄殑鏍峰瓙錛?/p>

鐪嬪埌娌★紝涓や釜鐩稿悓鐨勫浘鐗囪澶栨寕紼嬪簭鏍囪浜嗛鑹層傛垨鑰呬綘鍙互鐩存帴鐐瑰嚮“鑷姩娑堥櫎”鏉ヨ嚜鍔ㄦ秷闄や袱 涓浘鐗囥?/p>
緙栫▼瀹炵幇錛?/strong>
銆銆榪欓噷鏈変釜闅劇偣錛屽氨鏄榪炶繛鐪嬬殑娓告垙鐨勮儗鏅笉鏄崟鑹茬殑錛屾槸涓騫呭浘鐗囷紝閭f垜浠庝箞鍖哄垎 鍒板簳鏄儗鏅繕鏄墠鏅殑鍥劇墖鍛紵鎴戣繖閲岄噰鐢ㄤ簡涓鍔炴硶錛屽氨鏄敤璋冭瘯鐨勫姙娉曞幓璺熻釜錛屾妸姣忎釜鍖哄煙鐨?鑳屾櫙涔熺敓鎴愪簡瀹冧滑鐨処D錛屽埌鏃舵瘮杈冧竴涓嬪氨鏄簡銆傝繖閲屽氨鏄垜璺熻釜寰楀埌鐨勬暟鎹紝鎴戞妸瀹冮棬鍐欏埌浜嗘暟緇勯噷 鍒版椂鍊欑敤灝辨槸浜嗐傜浉鍏充唬鐮佸涓嬶細(xì)
//榪欓噷杈規(guī)斁鐨勬槸鑳屾櫙鐨処D
int BackGround[]={83886075,83886060,59434490,82188285,83820266,65305594,83754472,
79584810,82141361,71323293,79582750,79584250,75889042,83818977,62589434,
83175162,83332551,83553749,83818467,73624378,81705626,82759346,82496174,
82100272,81070586,81468437,83754215,83885803,77729230,73148330,78524918,
77217286,83754215,68069635,83597193,80299161,81172078,83027654,83503432,
83686365,65042170,59778810,62410490,83356632,67567649,83523625,81967762,
74584570,83885803,78520804,79577810,83027658,83818467,82220538,61620986,
83820266,83687393,83555050,83818222,83886072};
m_pBackGround=new int[BK_COUNT];
for(int i=0;i< BK_COUNT;i++)
{
m_pBackGround[i]=BackGround[i];
}
涓嬮潰鐨勫嚱鏁板氨鏄牴鎹浘鐗囩殑琛屽彿鍜屽垪鍙鋒潵鐢熸垚鍥劇墖鐨処D錛屽鏋滄槸鑳屾櫙鍥劇墖鍒欒繑鍥炰竴涓爣蹇椼?br>
//************璇ュ嚱鏁版牴鎹敱x銆亂鎸囧畾鐨勮鍒楄繑鍥炶浣嶇疆鐨勬柟鍧楃殑ID鍙?
//濡傛灉鏄儗鏅垯榪斿洖 BACKGROUND
int CLLK_CheatDlg::GetRectData(int x, int y)
{
CPoint ptPos[5]; //浜斾釜鍍忕礌鐐?
COLORREF colorData[5];
int nRetVal=0;
int basicX,basicY; //璇ユ柟鍧楀乏涓婅鐨勫潗鏍?
basicX=x*BLOCK_WIDTH;
basicY=y*BLOCK_HEIGHT;
//鍙栬鏂瑰潡鐨?涓偣鍒ゆ柇
ptPos[0].x=basicX+BLOCK_WIDTH/2; //涓棿鐐?
ptPos[0].y=basicY+BLOCK_HEIGHT/2;
ptPos[1].x=ptPos[0].x; //涓婅竟
ptPos[1].y=ptPos[0].y-5;
ptPos[2].x=ptPos[0].x;
ptPos[2].y=ptPos[0].y+5; //涓嬭竟
ptPos[3].x=ptPos[0].x-5;
ptPos[3].y=ptPos[0].y; //宸﹁竟
ptPos[4].x=ptPos[0].x+5; //鍙寵竟
ptPos[4].y=ptPos[0].y;
for(int i=0;i< 5;i++)
{
colorData[i] = GetPixel(m_MemDC.m_hDC,ptPos[i].x,ptPos[i].y);
}
for(i=0;i< 5;i++)
{
nRetVal+=colorData[i];
}
for(i=0;i< BK_COUNT;i++)
{
if(nRetVal==m_pBackGround[i])
return BACKGROUND;
}
return nRetVal;
}
鎺ヤ笅鏉ユ槸鍒ゆ柇涓や釜鍥劇墖鏄惁榪為氾紝浠g爜濡備笅錛?br>
BOOL CLLK_CheatDlg::IsLink(int x1, int y1, int x2, int y2)
{
//X鐩磋繛鏂瑰紡
if(x1==x2)
{
if(X1_Link_X2(x1,y1,y2))
return TRUE;
}
//Y鐩磋繛鏂瑰紡
else if(y1==y2)
{
if(Y1_Link_Y2(x1,x2,y1))
return TRUE;
}
//涓涓漿寮洿瑙掔殑鑱旈氭柟寮?
if(OneCornerLink(x1,y1,x2,y2))
{
return TRUE;
}
//涓や釜杞集鐩磋鐨勮仈閫氭柟寮?
else if(TwoCornerLink(x1,y1,x2,y2))
{
return TRUE;
}
return FALSE;
}
銆銆榪欎笅涓昏鐨勫伐浣滃凡鍋氱殑宸笉澶氫簡錛屾帴涓嬫潵灝辨槸鎸ㄤ釜鏌ユ壘鐩稿悓鐨勫浘鐗囷紝騫跺垽鏂畠浠槸鍚﹁繛閫氱殑錛屽鏋滄槸鍒欐彁紺烘垨鑰?鐩存帴娑堥櫎銆傝繖鏍蜂竴涓畝鍗曠殑澶栨寕灝卞仛鎴愪簡錛屾槸涓嶆槸涓嶆暍鐩鎬俊錛?
鍏朵粬鐨勪唬鐮佽鏌ョ湅婧愭枃浠躲?br>
緇撴潫璇?/strong>
銆銆榪欎釜紼嬪簭榪樻湁鐐瑰皬BUG錛屽氨鏄湁鏃朵細(xì)鏌ヤ笉鍒板彲浠ユ秷闄ょ殑鍥劇墖錛屾湁鍙兘灝辨槸鑾峰彇鑳屾櫙鍥劇墖鐨処D鏃舵病鏈夎幏鍙?鍒板噯紜殑鍊煎鑷寸▼搴忓彂閫佺殑娑堟伅寰椾笉鍒版晥鏋溿傚鏋滃ぇ瀹舵湁濂界殑鍔炴硶鍙互鑷繁鍘誨畬鍠勪竴涓嬨?
VC鏃墮亣鍒扮殑闂錛屾敹闆嗘暣鐞嗗涓嬶細(xì)
闂涓錛?br>LINK : fatal error LNK1104: cannot open file "mfc42ud.lib"
緙哄皯鏀寔Unicode鐨勬枃浠訛紱MFC瀹夎鐨勬椂鍊欙紝榛樿鏄笉瀹夎鏀寔Unicode鐨勭浉鍏蟲枃浠剁殑鍦╲c 鐨勫畨瑁呯洏涓婃湁錛屽湪vc98\MFC\Lib\涓? 榪橀渶瑕乨ll錛屽湪vc98\Debug涓嬨傛垜鎶婅繖浜涘簱鎵撲簡涓寘錛屼笂浼犱簡銆?br>
涓嬭澆鍦板潃錛?a >http://coosign.bokee.com/inc/MFC42UD.jpg
鎶?jpg鏀逛負(fù).rar瑙e帇銆傛妸lib鏀懼埌vc鐨刴fc\lib涓嬶紝dll鏀懼埌windows\system32涓嬨?/p>
闂浜岋細(xì)
LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main2006-11-06 11:00寮曪細(xì)鎴戠寽浣犳槸鐩存帴鎵撳紑錛堟垨緙栬緫錛変簡涓涓猈inmain紼嬪簭灝盉uild銆俈C++姝ゆ椂鍋囧畾浣犺寤虹珛Console紼嬪簭鑰屼笉鏄疓UI紼嬪簭錛岃孋onsole紼嬪簭鐨凷tartup Code瑕佽澆鍏ョ殑鏄痬ain()鑰屼笉鏄疻inmain(),瀵艱嚧榪炴帴澶辮觸銆傛敼姝g殑鏂規(guī)硶鏄皢鑿滃崟Project/Settings涓婰ink欏筄ption鍐呯殑/subsystem:console鏀逛負(fù)/subsystem:windows銆傛洿紼沖Ε鐨勫仛娉曟槸浠ュ悗鍏圢ew涓涓猈in32 GUI Project錛屽啀鎷瘋礉鍏ヤ綘鐨勭▼搴?鍐岯uild銆?/p>
鍦ㄧ汗鐞嗗悎鎴愭椂紕板埌榪囪繖涓敊璇紝鐢ㄤ笂榪版柟娉曡В鍐充簡錛?nbsp;
1銆佸綋綾繪ā鏉跨殑瀹氫箟鍙?qiáng)瀹炵幇鍒喖浕锛堝崨_啓鍦ㄤ笉鍚屾枃浠朵腑錛夋椂錛屽湪鍏朵粬鏂囦歡涓寘鍚被妯℃澘鐨勫畾涔夊繀欏誨寘鍚叾綾誨疄鐜版枃浠訛紙鍗?cpp鏂囦歡錛夛紝鑰屼笉鑳藉寘鍚被瀹氫箟鏂囦歡錛堝嵆.h鏂囦歡錛夛紝鍚﹀垯灝嗘敹鍒?#8220;error LNK2001”閿欒銆?
2銆佽嫢鏄竴鑸殑綾伙紙鍗充笉鏄ā鏉跨被錛夛紝鍦ㄥ叾浠栨枃浠跺寘鍚垯蹇呴』鍖呭惈澶存枃浠訛紙鍗?h鏂囦歡錛岀被澹版槑鏂囦歡錛夛紝鑰屼笉鑳藉寘鍚簮鏂囦歡錛堝嵆.cpp鏂囦歡錛岀被瀹炵幇鏂囦歡錛夛紝鍚﹀垯灝嗘敹鍒?#8220;error LNK2005”閿欒銆?
濡傦細(xì)
///test.h鏂囦歡
#ifndef HH
#define HH
class CTest
{
public:
CTest();
~CTest();
int get();
void set(int d);
private:
int num;
};
#endif
///test.cpp鏂囦歡
#include"lll.h"
CTest::CTest()
{
};
CTest::~CTest()
{
};
int CTest::get()
{
return num;
}
void CTest::set(int d)
{
num=d;
}
///main鏂囦歡
#include"test.cpp" //榪欓噷搴旇涓?include"test.h"
#include<iostream>
using namespace std;
int main()
{
CTest tt;
int n;
cin>>n;
tt.set(n);
cout<<tt.get()<<endl;
return 0;
}
浠ヤ笂紼嬪簭灝嗘敹鍒板涓嬮敊璇細(xì)
main.obj : error LNK2005: "public: __thiscall CTest::CTest(void)" (??0clll@@QAE@XZ
main.obj : error LNK2005: "public: __thiscall CTest::~CTest(void)" (??1clll@@QAE@XZ
main.obj : error LNK2005: "public: int __thiscall CTest::get(void)" (?get@clll@@QAEHXZ
main.obj : error LNK2005: "public: void __thiscall CTest::set(int)" (?set@clll@@QAEXH@Z
Debug/tt.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.
鍙堝錛?/font>
///test鏂囦歡錛?
#ifndef HH
#define HH
template<class T>
class CTest
{
public:
CTest();
~CTest();
T get();
void set(T d);
private:
T num;
};
#endif
///test.cpp鏂囦歡
#include"test.h"
template<class T>
CTest<T>::CTest()
{
};
template<class T>
CTest<T>::~CTest()
{
};
template<class T>
T CTest<T>::get()
{
return num;
}
template<class T>
void CTest<T>::set(T d)
{
num=d;
}
///main鏂囦歡錛?
#include"test.h" //榪欓噷搴旀敼涓?include"test.cpp"
#include<iostream>
using namespace std;
int main()
{
CTest<int> tt;
int n;
cin>>n;
tt.set(n);
cout<<tt.get()<<endl;
return 0;
}
濡備笂紼嬪簭灝嗘敹鍒板涓嬮敊璇細(xì)
main.obj : error LNK2001: unresolved external symbol "public: __thiscall CTest<int>::~CTest<int>(void)" (??1?$clll@H@@QAE@XZ
main.obj : error LNK2001: unresolved external symbol "public: int __thiscall CTest<int>::get(void)" (?get@?$clll@H@@QAEHXZ
main.obj : error LNK2001: unresolved external symbol "public: void __thiscall CTest<int>::set(int)" (?set@?$clll@H@@QAEXH@Z
main.obj : error LNK2001: unresolved external symbol "public: __thiscall CTest<int>::CTest<int>(void)" (??0?$clll@H@@QAE@XZ
Debug/tt.exe : fatal error LNK1120: 4 unresolved externals
Error executing link.exe.
valarray綾葷敤娉?/span>
1. apply 灝?/span>valarray鏁扮粍鐨勬瘡涓涓奸兘鐢?/span>apply鎵鎺ュ彈鍒扮殑鍑芥暟榪涜璁$畻
2. cshift 灝?/span>valarray鏁扮粍鐨勬暟鎹繘琛屽驚鐜Щ鍔紝鍙傛暟涓烘鑰呭乏縐諱負(fù)璐熷氨鍙崇Щ
3. max 榪斿洖valarray鏁扮粍鐨勬渶澶у?/span>
4. min 榪斿洖valarray鏁扮粍鐨勬渶灝忓?/span>
5. resize 閲嶆柊璁劇疆valarray鏁扮粍澶у皬錛屽茍瀵瑰叾榪涜鍒濆鍖?/span>
6. shift 灝?/span>valarray鏁扮粍縐誨姩錛屽弬鏁頒負(fù)姝h呭乏縐伙紝涓鴻礋鑰呭彸縐伙紝縐誨姩鍚庣敱0濉厖鍓╀綑浣?/span>
7. size 寰楀埌鏁扮粍鐨勫ぇ灝?/span>
8. sum 鏁扮粍姹傚拰
鏋勯犲嚱鏁?/span>
valarray( );
explicit valarray(size_t _Count);
valarray( const Type& _Val, size_t _Count);
valarray( const Type* _Ptr, size_t _Count);
valarray( const slice_array<Type>& _SliceArray);
valarray( const gslice_array<Type>& _GsliceArray);
valarray( const mask_array<Type>& _MaskArray);
valarray( const indirect_array<Type>& _IndArray);
slice綾葷敤娉?/span>
璇ョ被涓昏閰嶅悎valarray綾諱嬌鐢紝鍙互浠?/span>valarray涓彁鍙栧瓙鏁扮粍
slice( );
slice( size_t _StartIndex,//鎴彇鏁扮粍鐨勫紑濮嬩綅緗?/span>
const valarray<size_t> _Len, //瀛愭暟緇勭殑鏈澶ч暱搴?/span>
const valarray<size_t> _Stride//鐩擱殧澶氬皯涓厓绱犻変腑涓涓?/span>
);
鐢ㄦ硶錛?/span>
int main( )
{
using namespace std;
int i;
valarray<int> va ( 20 ), vaResult;
for ( i = 0 ; i < 20 ; i+=1 )
va [ i ] = 2 * (i + 1 );
cout << "The operand valarray va is:\n( ";
for ( i = 0 ; i < 20 ; i++ )
cout << va [ i ] << " ";
cout << ")." << endl;
slice vaSlice ( 1 , 7 , 3 );
vaResult = va [ vaSlice ];
cout << "\nThe slice of valarray va is vaResult:"
<< "\nva[slice( 1, 7, 3)] = ( ";
for ( i = 0 ; i < 7 ; i++ )
cout << vaResult [ i ] << " ";
cout << ")." << endl;
}
杈撳嚭緇撴灉錛?/span>
The operand valarray va is:
( 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 ).
The slice of valarray va is vaResult:
va[slice( 1, 7, 3)] = ( 4 10 16 22 28 34 40 ).
Gslice綾葷敤娉?/span>
Gslice綾葷殑鐢ㄦ硶鍜?span>slice鍩烘湰鐩稿悓錛屽彧鏄畠鎴彇鐨勬槸寰幆瀛愪覆錛屽綋姣嶄覆榪涜涓嬈℃彁鍙栧悗鐨勫瓧涓插厓绱犳暟鐩揪涓嶅埌瑕佹眰鏃訛紝gslice浼?xì)灏嗘彁鍙栧悗鐨勬瘝涓簿lх畫緇勫悎榪涜鎻愬彇鐩村埌婊¤凍瑕佹眰鎴栬呮瘝涓茶鎻愬彇瀹屼簡
鍏叡鍑芥暟(瀵規(guī)暟緇勭殑鎿嶄綔)
1.abs 瀵規(guī)暟緇勭殑姣忎竴涓厓绱犲彇緇濆鍊?/span>
2.acos 榪斿洖姣忎釜鍏冪礌鐨勫弽浣欏雞鍊?/span>
3.asin 榪斿洖姣忎釜鍏冪礌鐨勫弽姝e雞鍊?/span>
4.atan 榪斿洖姣忎釜鍏冪礌鐨勬鍒囧?/span>
5.atan2 絎涘崱灝?dāng)姝e垏鍊?/span>
6.cos 浣欏雞鍊?/span>
7.cosh 鍙屾洸綰夸綑寮﹀?/span>
8.exp 榪斿洖鑷劧鎸囨暟E^x
9.log 榪斿洖鑷劧瀵規(guī)暟
10.log10 榪斿洖浠?span>10涓哄簳鐨勮繑鍥炶嚜鐒跺鏁?/span>
11.exp 榪斿洖x^y
12.sin 姝e雞鍊?/span>
13.sinh 鍙屾洸綰挎寮﹀?/span>
14.sqrt 寮鏂?/span>
15.tan 姝e垏鍊?/span>
16.tanh 鍙嶆鍒囧?/span>
鎴戜滑鍦ㄨ 閲忎竴涓嚱鏁拌繍琛屾椂闂達(dá)紝鎴栬呭垽鏂竴涓畻娉曠殑鏃墮棿鏁堢巼錛屾垨鑰呭湪紼嬪簭涓垜浠渶瑕佷竴涓畾鏃跺櫒錛屽畾鏃舵墽琛屼竴涓壒瀹氱殑鎿嶄綔錛屾瘮濡傚湪澶氬獟浣撲腑錛屾瘮濡傚湪娓告垙涓瓑錛岄兘浼?xì)鐢ㄥ埌鏃堕棿鍑芥暟銆傝繕姣斿鎴戜滑閫氳繃璁板綍鍑芥暟鎴栬呯畻娉曞紑濮嬪拰鎴嚦鐨勬椂闂達(dá)紝鐒跺悗鍒╃敤涓よ呬箣宸緱鍑哄嚱鏁版垨鑰呯畻娉曠殑榪愯鏃墮棿銆傜紪璇戝櫒鍜屾搷浣滅郴緇熶負(fù)鎴戜滑鎻愪緵浜嗗緢澶氭椂闂村嚱鏁幫紝榪欎簺鏃墮棿鍑芥暟鐨勭簿搴︿篃鏄悇涓嶇浉鍚岀殑錛屾墍浠ワ紝濡傛灉鎴戜滑鎯沖緱鍒板噯紜殑緇撴灉錛屽繀欏諱嬌鐢ㄥ悎閫傜殑鏃墮棿鍑芥暟銆傜幇鍦ㄦ垜灝變粙緇?/span>windows涓嬬殑鍑犵甯哥敤鏃墮棿鍑芥暟銆?/span>
1錛?/span>Sleep鍑芥暟
浣跨敤錛?/span>sleep(1000)錛屽湪Windows鍜?/span>Linux涓?/span>1000浠h〃鐨勫惈涔夊茍涓嶇浉鍚岋紝Windows涓嬬殑琛ㄧず1000姣錛屼篃灝辨槸1縐掗挓錛?/span>Linux涓嬭〃紺?/span>1000縐掞紝Linux涓嬩嬌鐢ㄦ縐掔駭鍒殑鍑芥暟鍙互浣跨敤usleep銆?/span>
鍘熺悊錛?/span>sleep鍑芥暟鏄嬌璋冪敤sleep鍑芥暟鐨勭嚎紼嬩紤鐪狅紝綰跨▼涓誨姩鏀懼純鏃墮棿鐗囥傚綋緇忚繃鎸囧畾鐨勬椂闂撮棿闅斿悗錛屽啀鍚姩綰跨▼錛岀戶緇墽琛屼唬鐮併?/span>Sleep鍑芥暟騫朵笉鑳借搗鍒板畾鏃剁殑浣滅敤錛屼富瑕佷綔鐢ㄦ槸寤舵椂銆傚湪涓浜涘綰跨▼涓彲鑳戒細(xì)鐪嬪埌sleep(0);鍏朵富瑕佺洰鐨勬槸璁╁嚭鏃墮棿鐗囥?/span>
綺懼害錛?/span>sleep鍑芥暟鐨勭簿搴﹂潪甯鎬綆錛屽綋緋葷粺瓚婂繖瀹冪簿搴︿篃灝辮秺浣庯紝鏈夋椂鍊欐垜浠紤鐪?/span>1縐掞紝鍙兘3縐掑悗鎵嶈兘緇х畫鎵ц銆傚畠鐨勭簿搴﹀彇鍐充簬綰跨▼鑷韓浼樺厛綰с佸叾浠栫嚎紼嬬殑浼樺厛綰э紝浠ュ強(qiáng)綰跨▼鐨勬暟閲忕瓑鍥犵礌銆?/span>
2錛?/span>MFC涓嬬殑timer浜嬩歡
浣跨敤錛?/span>1.璋冪敤鍑芥暟SetTimer()璁劇疆瀹氭椂闂撮殧錛屽SetTimer(0,100,NULL)鍗充負(fù)璁劇疆100姣鐨勬椂闂撮棿闅旓紱2.鍦ㄥ簲鐢ㄧ▼搴忎腑澧炲姞瀹氭椂鍝嶅簲鍑芥暟OnTimer()錛屽茍鍦ㄨ鍑芥暟涓坊鍔犲搷搴旂殑澶勭悊璇彞錛岀敤鏉ュ畬鎴愭椂闂村埌鏃剁殑鎿嶄綔銆?/span>
鍘熺悊錛氬悓sleep鍑芥暟涓鏍楓備笉鍚岀殑鏄?/span>timer鏄竴涓畾鏃跺櫒錛屽彲浠ユ寚瀹氬洖璋冨嚱鏁幫紝榛樿涓?/span>OnTimer()鍑芥暟銆?/span>
綺懼害錛?/span>timer浜嬩歡鐨勭簿搴﹁寖鍥村湪姣背綰у埆錛岀郴緇熻秺蹇欏叾綺懼害涔熷氨瓚婂樊銆?/span>
3錛?/span>C璇█涓嬬殑Time
浣跨敤錛?/span>time_t t;time(&t);Time鍑芥暟鏄幏鍙栧綋鍓嶆椂闂淬?/span>
鍘熺悊錛?/span>time鍑芥暟涓昏鐢ㄤ簬鑾峰彇褰撳墠鏃墮棿錛屾瘮濡傛垜浠仛涓涓數(shù)瀛愭椂閽熺▼搴忥紝灝卞彲浠ヤ嬌鐢ㄦ鍑芥暟錛岃幏鍙栫郴緇熷綋鍓嶇殑鏃墮棿銆?/span>
綺懼害錛氱綰у埆
4錛?/span>COM瀵硅薄涓殑COleDateTime錛?/span>COleDateTimeSpan綾?/span>
浣跨敤錛?/span>COleDateTime start_time = COleDateTime::GetCurrentTime();
COleDateTimeSpan end_time = COleDateTime::GetCurrentTime()-start_time;
While(end_time.GetTotalSeconds() < 2)
{
// 澶勭悊寤舵椂鎴栧畾鏃舵湡闂磋兘澶勭悊鍏朵粬鐨勬秷鎭?/span>
DoSomething()
end_time = COleDateTime::GetCurrentTime-start_time;
}
鍘熺悊錛氫互涓婁唬琛ㄥ歡鏃?/span>2縐掞紝鑰岃繖涓ょ鍐呮垜浠彲浠ュ驚鐜皟鐢?/span>DoSomething()錛屼粠鑰屽疄鐜板湪寤舵椂鐨勬椂鍊欐垜浠篃鑳藉澶勭悊鍏朵粬鐨勫嚱鏁幫紝鎴栬呮秷鎭?/span>COleDateTime,COleDateTimeSpan鏄?/span>MFC涓?/span>CTime錛?/span>CTimeSpan鍦?/span>COM涓殑搴旂敤錛屾墍浠ワ紝涓婇潰鐨勬柟娉曞浜?/span>CTime錛?/span>CTimeSpa鍚屾牱鏈夋晥銆?/span>
綺懼害錛氱綰у埆
5錛?/span>C璇█涓嬬殑鏃墮挓鍛ㄦ湡clock()
浣跨敤錛?/span> clock_t start = clock();
Sleep(100);
clock_t end = clock();
double d = (double)(start - end) / CLOCKS_PER_SEC;
鍘熺悊錛?/span>clock()鏄幏鍙栬綆楁満鍚姩鍚庣殑鏃墮棿闂撮殧銆?/span>
綺懼害錛?/span>ms綰у埆錛屽浜庣煭鏃墮棿鍐呯殑瀹氭椂鎴栬呭歡鏃跺彲浠ヨ揪鍒?/span>ms綰у埆錛屽浜庢椂闂存瘮杈冮暱鐨勫畾鏃舵垨鑰呭歡榪熺簿搴﹁繕鏄笉澶熴傚湪windows涓?/span>CLOCKS_PER_SEC涓?/span>1000銆?/span>
6錛?/span>Windows涓嬬殑GetTickCount()
浣跨敤錛?/span> DWORD start = GetTickCount();
Sleep(100);
DWORD end = GetTickCount();
鍘熺悊錛?/span>GetTickCount()鏄幏鍙栫郴緇熷惎鍔ㄥ悗鐨勬椂闂撮棿闅斻傞氳繃榪涘叆鍑芥暟寮濮嬪畾鏃訛紝鍒伴鍑哄嚱鏁扮粨鏉熷畾鏃訛紝浠庤屽彲浠ュ垽鏂嚭鍑芥暟鐨勬墽琛屾椂闂達(dá)紝榪欑鏃墮棿涔熷茍
闈炴槸鍑芥暟鎴栬呯畻娉曠殑鐪熷疄鎵ц鏃墮棿錛屽洜涓哄湪鍑芥暟鍜岀畻娉曠嚎紼嬩笉鍙兘涓鐩村崰鐢?/span>CPU錛屽浜庢墍鏈夊垽鏂墽琛屾椂闂寸殑鍑芥暟閮芥槸涓鏍鳳紝涓嶈繃鍩烘湰涓婂凡緇忓緢鍑嗙‘錛屽彲浠ラ氳繃鏌ヨ榪涜瀹氭椂銆?/span>GetTickCount()鍜?/span>Clock()鍑芥暟鏄悜涓繪澘BIOS瑕?/span>real time clock鏃墮棿錛屼細(xì)鏈変腑鏂駭鐢燂紝浠ュ強(qiáng)寤惰繜闂銆?/span>
綺懼害錛?/span>WindowsNT 3.5浠ュ強(qiáng)浠ュ悗鐗堟湰綺懼害鏄?/span>10ms錛屽畠鐨勬椂闂寸簿搴︽瘮clock鍑芥暟鐨勮楂橈紝GetTickCount()甯哥敤浜庡濯掍綋涓?/span>
7錛?/span>Windows涓?/span>timeGetTime
浣跨敤錛氶渶瑕佸寘鍚?/span>Mmsystem.h錛?/span>Windows.h錛屽姞鍏ラ潤鎬佸簱Winmm.lib.
timeBeginPeriod(1);
DWORD start = timeGetTime();
Sleep(100);
DWORD end = timeGetTime();
timeEndPeriod(1);
鍘熺悊錛?/span>timeGetTime涔熸椂甯哥敤浜庡濯掍綋瀹氭椂鍣ㄤ腑錛屽彲浠ラ氳繃鏌ヨ榪涜瀹氭椂銆傞氳繃鏌ヨ榪涜瀹氭椂錛屾湰韜篃浼?xì)濯?jiǎng)鍝嶅畾鏃跺櫒鐨勫畾鏃剁簿搴︺?/span>
綺懼害錛氭縐掞紝涓?/span>GetTickCount()鐩稿綋銆備絾鏄拰GetTickCount鐩告瘮錛?/span>timeGetTime鍙互閫氳繃timeBeginPeriod錛?/span>timeEndPeriod璁劇疆瀹氭椂鍣ㄧ殑鏈灝忚В鏋愮簿搴?/span>, timeBeginPeriod,timeEndPeriod蹇呴』鎴愬鍑虹幇銆?/span>
8錛?/span>windows涓嬬殑timeSetEvent
浣跨敤錛氳繕璁扮殑VC涓嬬殑Timer鍚楋紵Timer鏄竴涓畾鏃跺櫒錛岃屼互涓婃垜浠彁鍒板嚑縐嶆椂闂村嚱鏁版垨鑰呯被鍨嬶紝瀹炵幇瀹氭椂鍔熻兘鍙兘閫氳繃杞鏉ュ疄鐜幫紝涔熷氨鏄繀欏誨彟澶栧垱寤轟竴涓嚎紼嬪崟鐙鐞嗭紝榪欐牱浼?xì)濯?jiǎng)鍝嶅畾鏃剁簿搴︼紝濂藉湪windows鎻愪緵浜嗗唴緗殑瀹氭椂鍣?/span>timeSetEvent錛屽嚱鏁板師鍨嬩負(fù)
MMRESULT timeSetEvent錛?/span> UINT uDelay, //浠ユ縐掓寚瀹氫簨浠剁殑鍛ㄦ湡
UINT uResolution, //浠ユ縐掓寚瀹氬歡鏃剁殑綺懼害錛屾暟鍊艱秺灝忓畾鏃跺櫒浜嬩歡鍒嗚鯨鐜囪秺楂樸傜己鐪佸間負(fù)1ms
LPTIMECALLBACK lpTimeProc, //鎸囧悜涓涓洖璋冨嚱鏁?/span>
WORD dwUser, //瀛樻斁鐢ㄦ埛鎻愪緵鐨勫洖璋冩暟鎹?/span>
UINT fuEvent 錛?/span>// 鏍囧織鍙傛暟錛?/span>TIME_ONESHOT錛氭墽琛屼竴嬈★紱TIME_PERIODIC錛氬懆鏈熸ф墽琛?/span>
鍏蜂綋搴旂敤鏃訛紝鍙互閫氳繃璋冪敤timeSetEvent()鍑芥暟錛屽皢闇瑕佸懆鏈熸ф墽琛岀殑浠誨姟瀹氫箟鍦?/span> lpFunction鍥炶皟鍑芥暟涓?/span>(濡傦細(xì)瀹氭椂閲囨牱銆佹帶鍒剁瓑)錛屼粠鑰屽畬鎴愭墍闇澶勭悊鐨勪簨浠躲傞渶瑕佹敞鎰忕殑鏄細(xì)浠誨姟澶勭悊鐨勬椂闂翠笉鑳藉ぇ浜庡懆鏈熼棿闅旀椂闂淬傚彟澶栵紝鍦ㄥ畾
鏃跺櫒浣跨敤瀹屾瘯鍚庯紝搴斿強(qiáng)鏃惰皟鐢?/span>timeKillEvent()灝嗕箣閲婃斁銆?/span>
鍘熺悊錛氬彲浠ョ悊瑙d負(fù)浠e洖璋冨嚱鏁扮殑timeGetTime
綺懼害錛氭縐掞紝timeSetEvent鍙互閫氳繃timeBeginPeriod錛?/span>timeEndPeriod璁劇疆瀹氭椂鍣ㄧ殑鏈灝忚В鏋愮簿搴?/span>, timeBeginPeriod,timeEndPeriod蹇呴』鎴愬鍑虹幇銆?/span>
9錛氶珮綺懼害鏃舵帶鍑芥暟QueryPerformanceFrequency錛?/span>QueryPerformanceCounter
浣跨敤錛?/span>LARGE_INTEGER m_nFreq;
LARGE_INTEGER m_nBeginTime;
LARGE_INTEGER nEndTime;
QueryPerformanceFrequency(&m_nFreq); // 鑾峰彇鏃墮挓鍛ㄦ湡
QueryPerformanceCounter(&m_nBeginTime); // 鑾峰彇鏃墮挓璁℃暟
Sleep(100);
QueryPerformanceCounter(&nEndTime);
cout << (nEndTime.QuadPart-m_nBeginTime.QuadPart)*1000/m_nFreq.QuadPart << endl;
鍘熺悊錛?/span>CPU涓婁篃鏈変竴涓鏁板櫒錛屼互鏈哄櫒鐨?/span>clock涓哄崟浣嶏紝鍙互閫氳繃rdtsc璇誨彇錛岃屼笉鐢ㄤ腑鏂紝鍥犳鍏剁簿搴︿笌緋葷粺鏃墮棿鐩稿綋銆?/span>
綺懼害錛氳綆楁満鑾峰彇紜歡鏀寔錛岀簿搴︽瘮杈冮珮錛屽彲浠ラ氳繃瀹冨垽鏂叾浠栨椂闂村嚱鏁扮殑綺懼害鑼冨洿銆?/span>
10灝忕粨錛氫互涓婃彁鍒板父鐢ㄧ殑9縐嶆椂闂村嚱鏁幫紝鐢變簬浠栦滑鐨勭敤澶勪笉鍚岋紝鎵浠ヤ粬浠殑綺懼害涔熶笉灝界浉鍚岋紝鎵浠ュ鏋滅畝鍗曠殑寤舵椂鍙互鐢?/span>sleep鍑芥暟錛岀◢寰噯紜殑寤舵椂鍙互浣跨敤clock鍑芥暟錛?/span>GetTickCount鍑芥暟錛屾洿楂樼駭鐨勫疄鐢?/span>timeGetTime鍑芥暟錛涚畝鍗曠殑瀹氭椂浜嬩歡鍙互鐢?/span>Timer錛屽噯紜湴鍙互鐢?/span>timeSetEvent錛涙垨鍙栦竴鑸郴緇熸椂闂村彲浠ラ?/span>time錛屾垨鑰?/span>CTime錛屾垨鑰?/span>COleDateTime錛岃幏鍙栧噯紜殑鏃墮棿鍙互鐢?/span>clock錛屾垨鑰?/span>GetTickCount鍑芥暟錛屾垨鑰?/span>timeGetTime鍑芥暟錛岃岃幏鍙栧噯紜湴緋葷粺鏃墮棿瑕佷嬌鐢ㄧ‖浠舵敮鎸佺殑QueryPerformanceFrequency鍑芥暟錛?/span>QueryPerformanceCounter鍑芥暟銆?br>
CStopwatch.h