锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
DWORD idThread, //綰跨▼ID,閫氳繃鍒涘緩綰跨▼鍚庣殑id
UINT Msg, //娑堟伅id
WPARAM wParam,
LPARAM lParam);
浠g爜鐗囨濡備笅:
DWORD nCount,
const HANDLE* lpHandles,
BOOL bWaitAll,
DWORD dwMilliseconds
);
絎竴涓弬鏁拌〃紺轟俊鍙鋒暟鐩?
褰撹緗産WaitAll = True,琛ㄧず蹇呴』鍏朵俊鍙峰繀欏婚兘杈懼埌nCount鎵嶅彲浠ヤ笅涓姝?鑰屼笉鏄痩pHandle鏁扮粍鐨勪俊鍙烽兘鍒?
鍚屾椂,濡傛灉lpHandle鐨勬煇涓俊鍙稴etEvent澶氭,鏄笉浼?xì)绡忚鍒皀Count涓?涔熷氨鏄,褰撳涓嚎紼嬪湪澶勭悊瀹屼互鍚?鍙互鍦ㄥ悇鑷殑綰跨▼浣撳繀欏昏皟鐢ㄤ笉鍚岀殑event鍙ユ焺鏉ュ彂淇″彿,瀹冩墠浼?xì)琚疮璁¤緫謭皀Count鍚庤В閿佽繘鍏ヤ笅涓姝?
緇忓父鍦ㄩ摼鎺ユ槸鎶ink2001閿欒錛屽叾涓竴鑸槸鍑芥暟浣撴病鏈夊畾涔夐敊璇備絾鏄帓闄や互涓婄畝鍗曠殑澶栵紝榪樻湁涓縐嶅涓嬫棤娉曡В鏋愮郴緇熸枃浠朵腑鐨勫嚱鏁板畾涔夈傚涓嬶細(xì)
LINK : warning LNK4098: 榛樿搴?#8220;LIBCMT”涓庡叾浠栧簱鐨勪嬌鐢ㄥ啿紿侊紱璇蜂嬌鐢?/NODEFAULTLIB:library
libcpmtd.lib(cerr.obj) : error LNK2001: 鏃犳硶瑙f瀽鐨勫閮ㄧ鍙?__CrtDbgReportW
libcpmtd.lib(stdthrow.obj) : error LNK2001: 鏃犳硶瑙f瀽鐨勫閮ㄧ鍙?__CrtDbgReportW
銆傘傘傘傘傘?br>libcpmtd.lib(_tolower.obj) : error LNK2019: 鏃犳硶瑙f瀽鐨勫閮ㄧ鍙?__calloc_dbg錛岃絎﹀彿鍦ㄥ嚱鏁?__Getctype 涓寮曠敤
鍍忚繖縐嶆儏鍐碉紝鍙互鎺ㄦ祴榪愮敤浜?jiǎn)閿欒鐨剺q愯搴撳寘銆?br>
鍦ㄤ竴紼嬪簭涓嬌鐢ㄤ笉鍚岀被鍨嬬殑榪愯鏃跺簱鎴栦嬌鐢ㄨ皟璇曞拰闈炶皟璇曠増鏈殑榪愯鏃跺簱錛屽垯灝嗘敹鍒版閾炬帴閿欒銆?br>
渚嬪錛岀紪璇戜竴涓枃浠朵互浣跨敤涓縐嶈繍琛屾椂搴擄紝鑰岀紪璇戝彟涓涓枃浠朵互浣跨敤鍙︿竴縐嶈繍琛屾椂搴擄紙渚嬪鍗曠嚎紼嬭繍琛屾椂搴撳澶氱嚎紼嬭繍琛屾椂搴擄級(jí)錛岃瘯鍥鵑摼鎺ュ畠浠紝鍒欏皢寰楀埌姝よ鍛娿傚簲灝嗘墍鏈夋簮鏂囦歡緙栬瘧涓轟嬌鐢ㄥ悓涓榪愯鏃跺簱銆?br>
鍏跺疄灝辨槸璋冩緙栬瘧鍣ㄩ夐」鍙傛暟錛?MD銆?MT 鍜? /LD
鍦╲c8涓紝鍦?#8220;閰嶇疆灞炴?->C/C++-->浠g爜鐢熸垚-->榪愯鏃跺簱”涓皢“澶氱嚎紼嬶紙/MT錛?#8221;緇熶竴鏀逛負(fù)“澶氱嚎紼嬭皟璇曪紙/MTd錛?#8221;鍗沖彲銆?br>
銆絳旀鏄?(*(void (*)( ) )0)( )銆?br>
銆棣栧厛錛屾渶鍩烘湰鐨勫嚱鏁板0鏄庯細(xì) void function (paramList);
銆鏈鍩烘湰鐨勫嚱鏁拌皟鐢細(xì) function(paramList);
銆銆閴翠簬闂?shù)腑鐨勫嚱鏁版病鏈夊弬鏁板Q屽嚱鏁拌皟鐢ㄥ彲綆鍖栦負(fù) function();
銆 鏍規(guī)嵁闂鎻忚堪錛屽彲浠ョ煡閬?0鏄繖涓嚱鏁扮殑鍏ュ彛鍦板潃錛屼篃灝辨槸璇達(dá)紝0鏄竴涓嚱鏁扮殑鎸囬拡銆?br> 浣跨敤鍑芥暟鎸囬拡鐨勫嚱鏁板0鏄庡艦寮忔槸錛歷oid (*pFunction)()錛岀浉搴旂殑璋冪敤褰㈠紡鏄細(xì) (*pFunction)()錛?br> 鍒欓棶棰樹(shù)腑鐨勫嚱鏁拌皟鐢ㄥ彲浠ュ啓浣滐細(xì)(*0)( )銆?br>
銆銆澶у鐭ラ亾錛屽嚱鏁版寚閽堝彉閲忎笉鑳芥槸涓涓父鏁幫紝鍥犳涓婂紡涓殑 0蹇呴』瑕佽杞寲涓哄嚱鏁版寚閽堛?br>
銆銆鎴戜滑鍏堟潵鐮旂┒涓涓嬶紝瀵逛簬浣跨敤鍑芥暟鎸囬拡鐨勫嚱鏁幫細(xì)
姣斿 void (*pFunction)( )錛屽嚱鏁版寚閽堝彉閲忕殑鍘熷瀷鏄粈涔堬紵
榪欎釜闂寰堢畝鍗曪紝pFunction鍑芥暟鎸囬拡鍘熷瀷鏄? void (*)( ) )錛屽嵆鍘繪帀鍙橀噺鍚嶏紝
娓呮櫚璧瘋錛屾暣涓姞涓婏紙錛夊彿銆?br>
銆銆鎵浠ュ皢 0寮哄埗杞崲涓轟竴涓繑鍥炲間負(fù)void錛屽弬鏁頒負(fù)絀虹殑鍑芥暟鎸囬拡濡備笅錛? void (*)( ) )銆?br>
銆銆 OK錛岀粨鍚?)鍜?)鐨勫垎鏋愶紝緇撴灉鍑烘潵浜?jiǎn)锛岄偅灏辨槸锛?xì)(*(void (*)( ) )0)( ) 銆?br>
銆銆絳旀鍒嗘瀽錛氫粠澶村埌灝劇悊瑙g瓟妗?br>
銆銆 (void (*)( )) 錛屾槸涓涓繑鍥炲間負(fù)void錛屽弬鏁頒負(fù)絀虹殑鍑芥暟鎸囬拡鍘熷瀷銆?br>銆銆 (void (*)( ))0錛屾妸0杞彉鎴愪竴涓繑鍥炲間負(fù)void錛屽弬鏁頒負(fù)絀虹殑鍑芥暟鎸囬拡錛屾寚閽堟寚鍚戠殑鍦板潃涓?.
銆銆 *(void (*)( ))0錛屽墠闈㈠姞涓?琛ㄧず鏁翠釜鏄竴涓繑鍥炲間負(fù)void鐨勫嚱鏁扮殑鍚嶅瓧
銆銆 (*(void (*)( ))0)( )錛岃繖褰撶劧灝辨槸涓涓嚱鏁頒簡(jiǎn)銆?br>
銆銆鎴戜滑鍙互浣跨敤 typedef娓呮櫚澹版槑濡備笅錛?br>
銆銆 typedef void (*pFun)();
榪欐牱瀹氫箟涔嬪悗錛宲Fun灝辨槸涓涓繑鍥炵被鍨嬩負(fù)void鏃犲弬鏁扮殑鍑芥暟鎸囬拡鍙橀噺浜?jiǎn)銆?br>
銆銆榪欐牱鍑芥暟鍙樹(shù)負(fù) (*(pFun)0)();
----
鍦ㄨ皟鐢ㄥ姩鎬佸簱鏃訛紝涔?fàn)鎯敤typedef閲嶆柊瀹氫箟鍔ㄦ佸簱鍑芥暟涓殑鍑芥暟鍦板潃錛堝嚱鏁版寚閽堬級(jí)錛?br>濡傚湪鍔ㄦ佸簱錛坱est.dll錛変腑鏈夊涓嬪嚱鏁幫細(xì)
int DoCase(int, long);
鍒欙紝鍦ㄨ皟鐢ㄥ姩鎬佸簱鏄湁涓ょ鏂規(guī)硶錛?br>1. 鍏堝0鏄庝竴涓笌鍔ㄦ佸簱涓被鍨嬩竴鑷寸殑鎸囬拡鍑芥暟鍙橀噺錛?br>
HINSTANCE gLibMyDLL = NULL;
gLibMyDLL = LoadLibrary("test.dll");
if(gLibMyDLL != NULL)
{
DOCASE = (int(*)(int,long))GetProcAddress(gLibMyDLL, "DoCase");
}
int s = DOCASE(1,1000);
2.鐢╰ypedef瀹氫箟涓涓寚閽堝嚱鏁幫細(xì)
typedef (*DOCASE)(int ,long);
HINSTANCE gLibMyDLL = NULL;
DOCASE _docase;
gLibMyDLL = LoadLibrary("test.dll");
if(gLibMyDLL != NULL)
{
_docase = (DOCASE)GetProcAddress(gLibMyDll, "DoCase");
}
int s=_docase(1,1000);
----------------
鍦–++綾諱腑浣跨敤鍑芥暟鎸囬拡銆?br>
class CA
{
public:
char lcFun(int a){ return; }
};
CA ca;
typedef char (CA::*PTRFUN)(int);
PTRFUN pFun;
void main()
{
pFun = CA::lcFun;
ca.(*pFun)(2);
}
鎸囬拡鐨勫畾涔変笌浣跨敤閮藉姞涓婁簡(jiǎn)“綾婚檺鍒?#8221;鎴?#8220;瀵硅薄”錛岀敤鏉ユ寚鏄庢寚閽堟寚鍚戠殑鍑芥暟鏄摢涓被鐨?
榪欓噷鐨勭被瀵硅薄涔熷彲浠ユ槸浣跨敤new寰楀埌鐨勩?br>濡傦細(xì)
CA *pca = new CA;
pca->(*pFun)(2);
delete pca;
鑰屼笖榪欎釜綾誨璞℃寚閽堝彲浠ユ槸綾誨唴閮ㄦ垚鍛樺彉閲忥紝浣犵敋鑷沖彲浠ヤ嬌鐢╰his鎸囬拡銆?br>濡傦細(xì)綾籆A鏈夋垚鍛樺彉閲廝TRFUN m_pfun;
void CA::lcFun2()
{
(this->*m_pFun)(2);
}
涓鍙ヨ瘽錛屼嬌鐢ㄧ被鎴愬憳鍑芥暟鎸囬拡蹇呴』鏈?#8220;->*”鎴?#8220;.*”鐨勮皟鐢ㄣ?br>
--------------------
void test(void* );
void tt()
{
printf("kao,娌$帺榪囪繖縐峔n");
}
int main(int argc, char* argv[])
{
typedef void(*Fun)();
Fun mytest;
mytest = tt;
test((void*)mytest);
return 0;
}
void test(void * p)
{
(*(void(*)())p)();
}
鍏充簬鍋忕Щ閲忕殑瀹忓畾涔?br>
#define offsetof(s,m) (size_t)&(((s *)0)->m)
s鏄竴涓粨鏋勫悕錛屽畠鏈変竴涓悕涓簃鐨勬垚鍛橈紙s鍜宮 鏄畯offsetof鐨勫艦鍙傦紝
瀹冨疄闄呮槸榪斿洖緇撴瀯s鐨勬垚鍛榤鐨勫亸縐誨湴鍧
(s *)0 鏄獥緙栬瘧鍣ㄨ鏈変竴涓寚鍚戠被錛堟垨緇撴瀯錛塻鐨勬寚閽堬紝鍏跺湴鍧鍊?
&((s *)0)->m 鏄鍙栧緱綾籹涓垚鍛樺彉閲弇鐨勫湴鍧
鍥犲熀鍧涓?錛岃繖鏃秏鐨勫湴鍧褰撶劧灝辨槸m鍦╯涓殑鍋忕Щ
鏈鍚庤漿鎹ize_t 鍨嬶紝鍗硊nsigned int銆?br>
鏈変緥瀛愬錛?nbsp;
struct AAA
{
int i;
int j;
};
struct AAA *pAAA;
pAAA = new AAA;
榪欐椂錛宲AAA瀹為檯涓婃槸涓涓狿ointer, 鎸囧悜鏌愪竴紜畾鐨勫唴瀛樺湴鍧錛?br>
濡?x1234;
鑰宲AAA->i 鏁翠綋鏄竴涓猧nt鍨嬪彉閲忥紝鍏跺湴鍧鏄?amp;(pAAA->i),
'&'涓哄彇鍧榪愮畻絎︼紱
閭d箞&(pAAA->i)涓瀹氱瓑浜?x1234,鍥?i 鏄粨鏋勪綋AAA鐨勭涓涓厓绱犮?nbsp;
鑰?amp;(pAAA->j)涓瀹氭槸0x1234 + 0x4 = 0x1238; 鍥犱負(fù)sizeof(int) = 4;
榪欎釜鍋氭硶鐨勫閥濡欎箣澶勫氨鏄細(xì)瀹冩妸“0”浣滀負(fù)涓婁緥涓殑pAAA,閭d箞&(pAAA->j)灝辨槸j鐨?nbsp;
offset鍟︼紝
瑙f瀽緇撴灉鏄細(xì)
(s*)0,灝?0 寮哄埗杞崲涓篜ointer to "s"
鍙互璁?pS = (s*)0錛宲S鏄寚鍚憇鐨勬寚閽堬紝瀹冪殑鍊兼槸0;
閭d箞pS->m灝辨槸m榪欎釜鍏冪礌浜?jiǎn)锛岃?amp;(pS->m)灝辨槸m鐨勫湴鍧錛?br>
灝辨槸offset鍟?nbsp;
#pragma warning(disable:4146)
#import "C:\Program Files\Common Files\System\ADO\msado15.dll" named_guids rename("EOF","adoEOF"), rename("BOF","adoBOF")
#pragma warning(default:4146)
using namespace ADODB;
"Provider=SQLOLEDB,Data Source=serverName;Initial Catalog=databaseName;User ID=userName;Password=userPassword;"
#import "c:\program files\common files\system\ado\msado15.dll" no_namespaces rename("EOF","adoEOF")
http://www.pconline.com.cn/pcedu/empolder/gj/vc/0507/653859.html
鎻忚堪濡備笅
Class binder1st binds the value to the first argument of the binary function, and binder2nd does the same thing
for the second argument of the function.
濡備笅錛氫緥瀛?br>
struct compare_str :binary_function<ST_DataResult*, char*, bool>
{
public:
bool operator()(ST_DataResult* pDataRet, char* szTypeCode) const
{
return strcmp(pDataRet->sType , szTypeCode) == 0 ? true : false;
}
};
銆傘傘?br>
char szTypeCode[4] = {'\0'};
strcpy(szTypeCode, sTypeCode);
pIt = find_if(m_d_ret_data.begin(), m_d_ret_data.end(),
bind2nd(compare_str(), szTypeCode));
鍏朵腑鎶妔zTypeCode鍙橀噺浼犲叆鍒癱ompare_str鎵瀹氫箟鐨勭浜屼釜鍙傛暟浣嶇疆浼犲叆銆?br>濡傛灉鍐欐垚bind1nd, 鍒欐槸鎶妔zTypeCode浣滀負(fù)絎竴涓弬鏁頒紶鍏ワ紝閭d箞浼?xì)鎶ラ敊銆?br>鍥犱負(fù)綾誨瀷涓嶅銆?br>
鍏朵腑鍦╳indows涓嬶紝鍒欓夋嫨鍏朵腑msw鐨勫帇緙╀笅杞姐?br>鎸夌収install鏂囨。瑕佹眰錛岀紪璇憌xWdigets涓殑builder鐩綍涓殑wx銆俠sp銆?br>鐢變簬璇xwdgets鏀寔澶氱緙栬瘧鍣紝閫夋嫨鐩稿叧鐨勫伐紼嬫枃浠跺姞杞姐?br>
浼犵粺閲囩敤vc6.
鐢熸垚鐨勭紪璇戞枃浠跺湪lib鐩綍涓傚鏋滈噰鐢╲c鍒欑洰褰曚負(fù)vc_lib.
鐢熸垚鐨刲ib鏂囦歡鏈?release or debug)錛?br>
wxbase28.lib wxbase28d.lib
wxbase28_net.lib wxbase28d_net.lib
wxbase28_xml.lib wxbase28d_xml.lib
wxmsw28_core.lib wxmsw28d_core.lib
wxmsw28_html.lib wxmsw28d_html.lib
wxmsw28_adv.lib wxmsw28d_adv.lib
鍦╲c涓緗甽ib錛屽彲浠ユ妸璇ョ洰褰曞姞鍏ワ紝涔熷彲浠ョ洿鎺ユ妸鐢熸垚鐨勬枃浠朵涪鍦╲c鐨刲ib鐩綍銆?/pre>
鍏充簬unicode妯″紡緙栬緫濡備笂銆?/pre>
鍦╥nclude璁劇疆涓紝闇瑕佸姞鍏xWidgets鐩綍涓殑include鐩綍銆?/pre>
榪愯demo紼嬪簭嫻嬭瘯.
娉ㄦ剰錛氬湪include涔熼渶瑕佹妸setup.h澶存枃浠跺姞鍏ャ傝澶翠篃鏍規(guī)嵁鐢熸垚鐨刲ib鐩綍涓皟鐢ㄣ?br> 涓嶈繃鏈濂藉姞鍦ㄩ澶勭悊鐨刬nclude directory鐩綍緙栬緫妗嗕腑銆?br>

2
3 using namespace std;
4
5 class CYException
6 {
7 public:
8 CString sMsg;
9 int nError;
10 CYException(int nErr,char* sErrMsg){
11 nError = nErr;
12 sMsg = sErrMsg;
13 }
14 virtual ~CYException(){}
15
16 };
17
18 template <class T>
19 class CYQueueSyn
20 {
21 public:
22 std::list<T> queue;
23 int m_outtime;
24 HANDLE m_readSem;
25 HANDLE m_writeSem;
26 HANDLE m_synObject;
27 public:
28 CYQueueSyn(int length,int outtime = INFINITE);
29 virtual ~CYQueueSyn(void);
30 public:
31 void inq(T type);
32 T outq();
33
34 void free();
35 };
36 ////////////////////////////////////////////////////////
37 template<class T>
38 void CYQueueSyn<T>::free()
39 {
40 int size = (int)queue.size();
41 for(int i = 0; i<size; i++)
42 delete queue.back();
43 queue.clear();
44 }
45 template<class T>
46 CYQueueSyn<T>::CYQueueSyn(int length,int outtime)
47 {
48 m_readSem = CreateSemaphore(NULL,0,length,NULL);
49 m_writeSem = CreateSemaphore(NULL,length,length,NULL);
50 m_synObject = ::CreateMutex(NULL,false,NULL);
51
52 m_outtime = outtime;
53 }
54 template<class T>
55 CYQueueSyn<T>::~CYQueueSyn()
56 {
57 CloseHandle(m_readSem);
58 CloseHandle(m_writeSem);
59 CloseHandle(m_synObject);
60 }
61
62 template<class T>
63 void CYQueueSyn<T>::inq(T type) throw(CYException)
64 {
65 int rVal = WaitForSingleObject(m_writeSem,m_outtime);
66 if(rVal == WAIT_OBJECT_0)
67 {
68 if(WaitForSingleObject(m_synObject,INFINITE) == WAIT_OBJECT_0)
69 {
70 queue.push_back(type);
71 ReleaseMutex(m_synObject);
72 }
73 }
74 else if(rVal == WAIT_TIMEOUT)
75 {
76 throw CYException(1,"TIMEOUT");
77 }
78 else if(rVal == WAIT_ABANDONED)
79 {
80 throw CYException(-1, "ERROR");
81 }
82 ReleaseSemaphore(m_readSem,1,NULL);
83 }
84 template<class T>
85 T CYQueueSyn<T>::outq() throw(CYException)
86 {
87 T value;
88 int rVal = WaitForSingleObject(m_readSem,m_outtime);
89 if(rVal == WAIT_OBJECT_0)
90 {
91 if(WaitForSingleObject(m_synObject,INFINITE) == WAIT_OBJECT_0)
92 {
93 value = queue.front();
94 queue.pop_front();
95 ReleaseMutex(m_synObject);
96 }
97 }
98 else if(rVal == WAIT_TIMEOUT)
99 {
100 throw CYException(1,"TIMEOUT");
101 }
102 else if(rVal == WAIT_ABANDONED)
103 {
104 throw CYException(-1,"ERROR");
105 }
106
107 ReleaseSemaphore(m_writeSem,1,NULL);
108 return value;
109 }
110
111 #endif
濡備笂錛屾祴璇曚唬鐮佷笅杞斤細(xì)http://www.pudn.com/downloads97/sourcecode/windows/other/109201257cqueue.rar