锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
闂鍘熷洜錛氬嚭鐜頒簡(jiǎn)闅愬紡閲嶅瀹氫箟銆俥xe 鍜孌LL涓噸澶嶅畾涔塤iob
瑙e喅鍔炴硶錛氱紪璇戝伐紼嬮兘璁劇疆鎴怐EBUG MTD(Multi-threaded Debug DLL (/MDd))錛坲se MFSas static library )
鐜錛欴L(VS2005錛?exe (VC6.0,VS2005)
]]>
涓插彛涓鍏?Pin,騫沖父杈冨父鐢ㄧ殑鏄疪S232,TX 鍜孯X,鍋氬紑鍏充嬌鐢ㄧ殑鏃跺欑敤鍒癉TR 鍜孯TS,涓鑸槸絎洓鍜岀涓働in.
鍦ㄦ墦寮涓插彛鐨勬椂鍊欏繀欏籈nable DTR鍜孯TS銆?br>
dcb.fDtrControl = DTR_CONTROL_ENABLE;
dcb.fRtsControl= RTS_CONTROL_ENABLE;
DTR錛孯TS Pin 鍦ㄤ覆鍙e紑鍜屽叧鐨勬椂鍊欑數(shù)鍘嬪垎鍒負(fù)姝h礋11 浼? 濡傛鍙互鍋氫袱涓紑鍏沖疄鐜板洓縐嶇姸鎬併?
]]>
HANDLE hFile= CreateFile(L"\\123.txt",, GENERIC_READ | GENERIC_WRITE, 0, NULL,
OPEN_EXISTING FILE_ATTRIBUTE_NORMAL, NULL);
...
HANDLE hMapFile =CreateFileMapping( hFile, NULL, PAGE_READWRITE, 0,100, NULL);
if (hMapFile == NULL) {
printf("hMapFile is NULL: last error: %d\n", GetLastError() );
return (2);
}
....
CloseHandle(hFile);
CloseHandle(hMapFile);
閿欒浠g爜 6錛?#8220;鍙ユ焺鏃犳晥”錛岃皟璇曟鏌File 鍙ユ焺錛岀‘瀹炴湁鏁堛?br>
鍦≒C涓婂伐浣滄甯哥殑浠g爜錛岀Щ妞嶅埌PDA涓婁細(xì)鍑虹幇榪欎釜闂錛岀浉褰撶殑闅懼彈浜猴紝鍞竴鐨勫湪涓涓狤鏂囩綉绔欑湅鍒頒竴綃囨枃绔犳湁璇村埌錛孋E,鍜孭PC涓婁笉鑳界敤CreateFile()寰楀埌鐨勫彞鏌勪綔涓篊reateFileMapping()鐨勮緭鍏ワ紝璇ユ庝箞瑙e喅鍗存病鏈夌湅鍒頒笅鏂囥?br>
闂鍏堟斁鍦ㄨ繖浜?jiǎn)锛屽鏋滄湁楂樻墜閬囧埌杩嚲c諱技闂錛岃涓嶅悵鎸囨暀錛岀暀涓嬭剼鍗般?br>
浠旂粏鐪婱SDN錛屽師鏉ユ槸鑷繁鎶婅嚜宸辯粰蹇芥?zhèn)犱簡(jiǎn)锛屼笂闈㈡槑鏄庡啓浜?jiǎn)瑕佺敤CreateFileForMapping()鏉ュ緱鍒板彞鏌勶紝鑷繁涓鐩存病鏈夊皬蹇?jī)鐪?
In both Release and debug 妯″紡,hPreInstance姣忔閮戒細(xì)寰楀埌0X00000000,騫朵笉鍥犱負(fù)鏈夊彟澶栦竴涓疄浣撶殑瀛樺湪鑰屽緱鍒板埆鐨勮緭鍏?浣嗘槸CreateMutex()鍙互渚︽祴鍒版槸涓嶆槸絎竴涓疄浣?
涓嶇煡閬撴槸鎴戠悊瑙g殑涓嶅榪樻槸榪欑璇存硶鏈夎錛?br>閭d箞錛孋reateMutex() 鍙堟槸鎬庝箞鏉ュ疄鐜扮殑鍛紵
鏈夌偣鏂珷鍙栦箟浜?jiǎn)锛屾枃绔犲悗闈㈡湁璇村垘图?xì)
"浠ヤ笂鎯呭喌鍦╓indows NT鍜學(xué)indows 95 涓暐鏈夊彉鍖栫敱浜嶹in32 紼嬪紡鐨勬瘡涓墽琛屽疄浣?閮芥湁鑷繁鐨勫湴鍧絀洪棿,鍏辯敤涓涓紿楃被鍒凡緇忎笉鍙兘,hPreInstance 姘歌繙涓洪浂銆?
int main(int argc, char* argv[])
{
int countx = 0,
x=9991;
char szBinary[64]={0};
printf("please input an int data\n",countx);
scanf("%d",&x);
itoa(x,szBinary,2);
printf("x=%d\t%s\n",x,szBinary);
while(x)
{
countx ++;
x = x&(x-1);
itoa(x,szBinary,2);
printf("x=%d\t%s\n",x,szBinary);
}
printf("countx=%d\n",countx);
system("pause");
// printf("press any key to quit\n",countx);
return 0;
}
綆楁硶鍥虹劧濂?浣嗘槸涓嶅緢鐩磋鍝?br>鍏跺疄鎴戣寰楀彧瑕佽漿鍖栨垚瀛楃涓蹭箣鍚?鐩存帴鎵鵑噷闈?1"瀛楃灝卞彲浠ヤ簡(jiǎn),鍚屾牱鐨勬墿灞曟ф洿濂?鍙互杞寲鎴愰殢鎰忚繘鍒?鎵鵑殢鎰忔暟瀛楃殑涓暟 .
| Hook | Scope |
|---|---|
| WH_CALLWNDPROC | Thread or global |
| WH_CALLWNDPROCRET | Thread or global |
| WH_CBT | Thread or global |
| WH_DEBUG | Thread or global |
| WH_FOREGROUNDIDLE | Thread or global |
| WH_GETMESSAGE | Thread or global |
| WH_JOURNALPLAYBACK | Global only |
| WH_JOURNALRECORD | Global only |
| WH_KEYBOARD | Thread or global |
| WH_KEYBOARD_LL | Global only |
| WH_MOUSE | Thread or global |
| WH_MOUSE_LL | Global only |
| WH_MSGFILTER | Thread or global |
| WH_SHELL | Thread or global |
| WH_SYSMSGFILTER | Global only |
HWND hWndDesk;
HDC hdc,hdcmem;//hdc1,
BITMAP bm;
HBITMAP hOldBmp;
HPEN hPen;
HANDLE hBitmapImag;
TCHAR szTemp[MAX_PATH]={0};
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
char* cpText ="鍦ㄦ闈㈣緭鍑轟緥紼?; //瑕佹樉紺虹殑瀛楃涓?nbsp;
hWndDesk=GetDesktopWindow();
if(hWndDesk==NULL)
MessageBox(NULL,"GetDesktopWindow() fail",NULL,0);
hPen=CreatePen(PS_SOLID,20,RGB(255,0,0));
if(hPen==NULL) MessageBox(NULL,"CreatePen() fail",NULL,0);
//hdc1=GetDC(hWndDesk);
hdc=GetWindowDC(hWndDesk); //hdc1 hdc 鐨勭粨鏋滀笉涓鏍鳳紝鍙ユ焺涓嶄竴鏍鳳紝浣跨敤hdc1鏄劇ず灝嗘病鏈夋晥鏋?鍘熷洜GetDC()寰楀埌鐨勫彧鏄鎴峰尯鐨勫彞鏌?鑰孏etWindowDC()寰楀埌鐨勬槸鍖呮嫭闈炲鎴峰尯鐨勬暣涓獥鍙g殑鍙ユ焺,浣犲彲浠ュ湪鏍囬鏍忔搷浣?br> //GetWindowText(hWndDesk,szTemp,MAX_PATH);
TextOut(hdc,100,100, cpText, strlen(cpText)); //鍦ㄦ闈笂鏄劇ず瀛楃涓?nbsp;
hBitmapImag=(HBITMAP)LoadImage(NULL,TEXT("c:\\pic.bmp"),IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);
if(!hBitmapImag) MessageBox(NULL,TEXT("LoadImage() fail"),NULL,0);
GetObject( hBitmapImag, sizeof( BITMAP), (LPVOID)&bm);
hdcmem=CreateCompatibleDC(hdc);
hOldBmp =(HBITMAP)SelectObject(hdcmem,hBitmapImag);
BitBlt(hdc,100,100,bm.bmWidth,bm.bmHeight,hdcmem,0,0,SRCCOPY);
SelectObject(hdc, hOldBmp);
DeleteObject(hPen);
ReleaseDC(hWndDesk, hdc);
return 0;
}
HANDLE hProcess=INVALID_HANDLE_VALUE;
HANDLE hSnapshot=INVALID_HANDLE_VALUE;
hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
PROCESSENTRY32 pe;
Process32First(hSnapshot,&pe);
do
{
// do what you want
hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pe.th32ProcessID);
if(hProcess==NULL) {
_stprintf(szTemp,"OpenProcess() fail\n %d\n%s",GetLastError(),pe.szExeFile);
wsprintf(szExePath,_T("%s"),"not get Process handle OpenProcess()");
}else if(0==GetModuleFileNameEx((HINSTANCE)hProcess,NULL,szExePath,MAX_PATH))
{
_stprintf(szTemp,"GetModuleFileName() fail %d\n%s\n%s",GetLastError(),pe.szExeFile,szExePath);
wsprintf(szExePath,_T("%s"),"not get Process handle GetModuleFileName()");
}
}
while(Process32Next(hSnapshot,&pe));
CloseHandle(hSnapshot);
OpenProcess() 閿欒ERROR CODE 5:鎷掔粷璁塊棶.闇瑕佸彇寰楃浉搴旂殑鏉冮檺.
OpenProcessToken鍑芥暟鐨勫姛鑳芥槸鎵撳紑涓涓笌涓榪涚▼鐩歌仈緋葷殑璁塊棶浠ょ墝(access token)錛屽畠鐨勫師鍨嬪涓嬶細(xì)
BOOL OpenProcessToken(
HANDLE ProcessHandle,
DWORD DesiredAccess,
PHANDLE TokenHandle
);
濡傚悓MSDN涓婃墍璇達(dá)紝瀵逛簬Windows XP Professional錛屽鏋滀竴鍙拌綆楁満鍔犲叆鍒頒竴涓伐浣滅粍涓紝鑰屼笖"Force network logons using local accounts to authenticate as Guest"鐨勯檺鍒惰嬋媧葷殑璇濓紝姝ゅ嚱鏁頒細(xì)澶辮觸銆?
鍙﹀錛屽鏋滃湪璋冪敤鐨勬椂鍊欎嬌鐢ㄤ簡(jiǎn)TOKEN_ALL_ACCESS璇鋒眰錛屽嚱鏁頒篃鍙兘浼?xì)澶辫触銆傝繖鏄洜涓篢OKEN_ALL_ACCESS鍙兘鍖呭惈浜?jiǎn)TOKEN_ADJUST_SESSIONID錛堝湪Winnt.h涓瀹氫箟錛夈俆OKEN_ADJUST_SESSIONID鏄竴涓柊鐨勮闂甿ask錛屾槸鍦╓indows 2000鍜學(xué)indows XP涓柊澧炵殑銆傚湪Windows NT 4.0涓紝璁塊棶浠ょ墝鐨勮闂帶鍒跺垪琛ㄤ腑鏄病鏈夎繖涓肩殑銆傛墍浠ワ紝濡傛灉涓涓簲鐢ㄧ▼搴忔槸浣跨敤鏂扮殑Platform SDK涓殑Winnt.h浣嗗嵈鍦╓indows NT 4.0涓嬭繍琛岀殑璇濓紝鍦ㄨ皟鐢∣penProcessToken()鎴栬匫penThreadToken鏃舵寚瀹氫簡(jiǎn)TOKEN_ALL_ACCESS鐨勮瘽錛屽嚱鏁頒篃浼?xì)澶辫触锛堜娇鐢℅etLastError()榪斿洖鐨勬槸ERROR_ACCESS_DENIED)銆?/u>
typedef struct _TOKEN_PRIVILEGES {
DWORD PrivilegeCount;
LUID_AND_ATTRIBUTES PrivilegeCount;
LUID_AND_ATTRIBUTES Privileges[]; } TOKEN_PRIVILEGES, *PTOKEN_PRIVILEGES;
BOOL AdjustTokenPrivileges(
HANDLE TokenHandle, // handle to token
BOOL TokenHandle, // handle to token
BOOL DisableAllPrivileges, // disabling option
PTOKEN_PRIVILEGES NewState, // privilege information
DWORD NewState, // privilege information
DWORD BufferLength, // size of buffer
PTOKEN_PRIVILEGES PreviousState, // original state buffer
PDWORD PreviousState, // original state buffer
PDWORD ReturnLength // required buffer size
);
鍦ㄦ灇涓炬墍鏈夎繘紼嬩箣鍓嶈幏鍙栨搷浣滄潈闄?灝卞彲浠ラ伩鍏嶅嚭閿欑殑闂,褰撶劧鍙傛暟瑕佽緗負(fù)Enable.
BOOL ProcessPrivilege(BOOL bEnable)
{
BOOL bResult = TRUE;
HANDLE hToken=INVALID_HANDLE_VALUE;
TOKEN_PRIVILEGES TokenPrivileges;
if(OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES,&hToken) == 0)
{
printf("OpenProcessToken Error: %d\n",GetLastError());
bResult = FALSE;
}
TokenPrivileges.PrivilegeCount = 1;
TokenPrivileges.Privileges[0].Attributes = bEnable ? SE_PRIVILEGE_ENABLED : 0;
LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&TokenPrivileges.Privileges[0].Luid);
AdjustTokenPrivileges(hToken,FALSE,&TokenPrivileges,sizeof(TOKEN_PRIVILEGES),NULL,NULL);
if(GetLastError() != ERROR_SUCCESS)
{
bResult = FALSE;
}
CloseHandle(hToken);
return bResult;
}
nRet=ReadFile(hFile,buffer,dwNeedRead,&dwRead,NULL);
if(!nRet){
MessageBox("ReadFile() fail","Error",0);
CloseHandle(hFile);
return;
}
memcpy(wchbuffer,buffer,1024);
_tsetlocale(LC_ALL,_T(""));//璁劇疆浠g爜欏?br> nRet=wcstombs(chbuffer,wchbuffer,sizeof(wchbuffer));
if(nRet==1) {
sprintf(chmsg,"wcstombs changed :%d Error:%d",nRet,GetLastError());
MessageBox(chmsg,"debug",0);
}
瑕佽鎵鏈夊唴瀹圭殑璇濓紝榪橀渶瑕佸鐞嗐?/p>
#include <windows.h>
WINDOWS.H鏄富瑕佺殑鍚叆妗f錛屽畠鍖呭惈浜?jiǎn)鍏朵粬Windows琛ㄥご妗f錛岃繖浜涜〃澶存。妗堢殑鏌愪簺涔熷寘鍚簡(jiǎn)鍏朵粬琛ㄥご妗f銆傝繖浜涜〃澶存。妗堜腑鏈閲嶈鐨勫拰鏈鍩烘湰鐨勬槸錛?br>WINDEF.H 鍩烘湰鍨嬫佸畾涔夈?br>WINNT.H 鏀彺Unicode鐨勫瀷鎬佸畾涔夈?br>WINBASE.H Kernel鍑藉紡銆?br>WINUSER.H 浣跨敤鑰呬粙闈㈠嚱寮忋?br>WINGDI.H 鍥懼艦瑁呯疆浠嬮潰鍑藉紡銆?br>榪欎簺琛ㄥご妗f瀹氫箟浜?jiǎn)Windows鐨勬墍鏈夎祫鏂欏瀷鎬併佸嚱寮忓懠鍙佽祫鏂欑粨鏋勫拰甯告暟璇嗗埆瀛楋紝瀹冧滑鏄疻indows鏂囦歡涓殑涓涓噸瑕侀儴鍒嗐?/font>
鍑芥暟璋冪敤瑙勫垯鎸囩殑鏄皟鐢ㄨ呭拰琚皟鐢ㄥ嚱鏁伴棿浼犻掑弬鏁板強(qiáng)榪斿洖鍙傛暟鐨勬柟娉曪紝甯哥敤鐨勬湁Pascal錛?stdcall錛宑decl.
__cdecl C璋冪敤瑙勫垯錛?/p>
錛戯紟鍦ㄥ悗闈㈢殑鍙傛暟鍏堣繘鍏ュ爢鏍堬紱
錛掞紟鍦ㄥ嚱鏁拌繑鍥炲悗錛岃皟鐢ㄨ呰璐熻矗娓呴櫎鍫嗘爤錛庢墍浠ヨ繖縐嶈皟鐢ㄥ父浼?xì)鐢熸垚杈冨ぇ鐨勫彲鎵ц绋嬪簭锛?/p>
__stdcall 鍙堢О涓篧INAPI錛?鍏惰皟鐢ㄨ鍒欙細(xì)
錛戯紟鍦ㄥ悗闈㈢殑鍙傛暟鍏堣繘鍏ュ爢鏍堬紱
錛掞紟琚皟鐢ㄧ殑鍑芥暟鍦ㄨ繑鍥炲墠鑷娓呯悊鍫嗘爤錛屾墍浠ョ敓鎴愮殑浠g爜姣攃decl灝忥紟
Pascal 璋冪敤瑙勫垯錛?/p>
錛癮scal璋冪敤瑙勫垯涓昏鐢ㄥ湪妗堬擠錛╋籍錛戯紪鍑芥暟搴撲腑錛岀幇鍦ㄥ熀鏈笉鐢紟
錛戯紟鍙傛暟鍦ㄥ墠鐨勫厛榪涘叆鍫嗘爤錛?/p>
錛掞紟涓嶆敮鎸佸彲鍙樺弬鏁扮殑鍑芥暟璋冪敤錛?/p>
switch(message){
case WM_CREATE:
hpenDot = CreatePen(PS_DOT, 2, RGB(255, 0, 0)); //鍒涘緩铏氱嚎鐢葷瑪
hFont=CreateFont( // Create Font
15, // nHeight
0, // nWidth
0, // nEscapement
0, // nOrientation
FW_NORMAL, // nWeight
FALSE, // bItalic
FALSE, // bUnderline
0, // cStrikeOut
ANSI_CHARSET, // nCharSet
OUT_DEFAULT_PRECIS, // nOutPrecision
CLIP_DEFAULT_PRECIS, // nClipPrecision
DEFAULT_QUALITY, // nQuality
DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily
_T("Arial")); // lpszFacename
break;
case WM_COMMAND:
break; // do nothing
case WM_PAINT:
SetWindowText(hWnd,"Text test");
hdc = BeginPaint(hWnd, &ps);
if(NULL==SelectObject(hdc,hFont))
MessageBox(NULL,"fail font","debug",0);
if(NULL==SelectObject(hdc,hpenDot))
MessageBox(NULL,"fail pen","debug",0);
GetClientRect(hWnd, &rt);
_stprintf(szMsg,"((%d,%d),(%d,%d))",rt.left,rt.top,rt.right,rt.bottom);
//SetBkColor(hdc,RGB(255,0,0));
// DrawText(hdc, szMsg, strlen(szMsg), &rt, DT_CENTER);
TextOut(hdc,10,10,szMsg,strlen(szMsg));
Rectangle(hdc,100, 100, 550,250);
EndPaint(hWnd, &ps);
UpdateWindow(ghWnd);
break;
case WM_CLOSE:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd,message,wParam,lParam);
}
return DefWindowProc(hWnd,message,wParam,lParam);
}
EVC 鐗堬細(xì)
LRESULT CALLBACK DlgProc_Panel(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
static HDC hdc;
static PAINTSTRUCT ps;
static RECT rt;
static HBRUSH hBrush;
static COLORREF wColor=RGB(0,0,0);
static int nDrawTimes=0;
static HFONT hFont;
static LOGFONT m_logfnt;
TCHAR lfFaceName[32]= TEXT("Times New Roman");
m_logfnt.lfCharSet=DEFAULT_CHARSET;
m_logfnt.lfClipPrecision=CLIP_DEFAULT_PRECIS;
m_logfnt.lfEscapement=0;
m_logfnt.lfHeight=80;
m_logfnt.lfItalic=false;
m_logfnt.lfOrientation=0;
m_logfnt.lfPitchAndFamily=FF_SWISS;
m_logfnt.lfQuality=DEFAULT_QUALITY;
m_logfnt.lfStrikeOut=false;
m_logfnt.lfUnderline=true;
m_logfnt.lfWeight=800;
m_logfnt.lfWidth=20;
m_logfnt.lfOutPrecision=OUT_DEFAULT_PRECIS;
switch (message)
{
case WM_INITDIALOG:
hFont=CreateFontIndirect(&m_logfnt);
nDrawTimes=0;
wColor=RGB(255,0,0);
MoveWindowFullScreen(hDlg);
break;
case WM_PAINT:
hdc = BeginPaint(hDlg, &ps);
GetClientRect(hDlg, &rt);
hBrush=CreateSolidBrush(wColor);
FillRect(hdc,&rt,hBrush);
//TextOut(hdc, rt.left+10, rt.top+100, "Test", 4);
SelectObject(hdc,hFont);
SetTextColor(hdc,RGB(0,0,255));
rt.top += rt.bottom/2;
DrawText(hdc,TEXT("Test\n"),-1,&rt,DT_CENTER);
DeleteObject(hBrush);
EndPaint(hDlg, &ps);
break;
case WM_LBUTTONDOWN:
case WM_KEYUP:
InvalidateRect(hDlg,&rt,TRUE);
EndDialog(hDlg,TRUE);
break;
}
return FALSE;
}
enum Win32Type{
Win32s,
WinNT3,
Win95,
Win98,
WinME,
WinNT4,
Win2000,
WinXP
};
Win32Type IsShellType()
{
Win32Type ShellType;
DWORD winVer;
OSVERSIONINFO *osvi;
winVer=GetVersion();
dwMajorVersion=(DWORD)(LOBYTE(LOWORD(winVer)));
dwMinorVersion=(DWORD)(HIBYTE(LOWORD)(winVer)));
if(winVer<0x80000000){/*NT */
ShellType=WinNT3;
osvi= (OSVERSIONINFO *)malloc(sizeof(OSVERSIONINFO));
if (osvi!=NULL){
memset(osvi,0,sizeof(OSVERSIONINFO));
osvi->dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
GetVersionEx(osvi);
if(osvi->dwMajorVersion==4L)ShellType=WinNT4;
else if(osvi->dwMajorVersion==5L&&osvi->dwMinorVersion==0L)ShellType=Win2000; //version 5.0
else if(osvi->dwMajorVersion==5L&&osvi->dwMinorVersion==1L)ShellType=WinXP; //version 5.1
free(osvi);
}
}
else if (LOBYTE(LOWORD(winVer))<4)
ShellType=Win32s;
else{
ShellType=Win95;
osvi= (OSVERSIONINFO *)malloc(sizeof(OSVERSIONINFO));
if (osvi!=NULL){
memset(osvi,0,sizeof(OSVERSIONINFO));
osvi->dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
GetVersionEx(osvi);
if(osvi->dwMajorVersion==4L&&osvi->dwMinorVersion==10L)ShellType=Win98;
else if(osvi->dwMajorVersion==4L&&osvi->dwMinorVersion==90L)ShellType=WinME;
free(osvi);
}
}
return ShellType;
}
VC6.0 Windows XP SP2 榪愯姝e父
鍦ㄦ帶鍒跺埆鐨勫簲鐢ㄧ▼搴忕殑鏃跺欙紝緇忓父闇瑕佺瓑寰呯洿鍒版煇涓姛鑳界粨鏉燂紝渚嬪:
鎵撳紑涓涓獥鍙?/span>-->絳夊緟鐩村埌紿楀彛緇撴潫 錛?/span>榪欎釜鏃跺欏氨鍙互鐢ㄥ埌SendMessage
濡傛灉鍦ㄦ墦寮榪欎釜紿楀彛鍚庝粛鐒墮渶瑕佸璇ョ獥鍙g殑鐣岄潰榪涜璁劇疆錛屾瘮濡?/span>Edit鐨?/span>value絳夌瓑,姣斿錛?/span>
鎵撳紑涓涓獥鍙?/span>-->鎺у埗紿楀彛鐨?/span>control鐨勫睘鎬?/span>
榪欎釜鏃跺欏氨闇瑕?/span>PostMessage
浣跨敤涓涓挬瀛愮▼搴忔埅鑾鋒秷鎭悗,浣跨敤SendMessage鎶婃秷鎭彂閫佸埌涓誨鐞嗙▼搴忚繘琛屽鐞?/span>,浣嗘槸鍦ㄤ富澶勭悊紼嬪簭榪樻病鏈夊畬鎴愪換鍔$殑鏃跺?/span>,琚緗挬瀛愮殑紼嬪簭榪涘叆浜?jiǎn)鍋滄鐨勭姸鎬?/span>,涓嶅彲浠ュ鐞?WM_PAINT, WM_MOVE, .......絳夌殑鍩烘湰淇℃伅, 蹇呴』瑕佺瓑SendMessage鍙戦佸嚭鐨勬秷鎭畬鎴愬悗,鎵嶈兘緇х畫榪愯,鏁翠釜鐣岄潰涓鐗囩┖鐧?/span>,鎶婇挬瀛愭秷鎭緗垚PostMessage鐨勫彂閫佹秷鎭艦寮忓悗,闂瑙e喅!
PostMessage鍙槸鎶婃秷鎭斁鍏ラ槦鍒楋紝涓嶇鍏朵粬紼嬪簭鏄惁澶勭悊閮借繑鍥烇紝鐒跺悗緇х畫鎵ц;
鑰?/span>SendMessage蹇呴』絳夊緟鍏朵粬紼嬪簭澶勭悊娑堟伅鍚庢墠榪斿洖錛岀戶緇墽琛屻?/span>
PostMessage鐨勮繑鍥炲艱〃紺?/span>PostMessage鍑芥暟鎵ц鏄惁姝g‘;
鑰?/span>SendMessage鐨勮繑鍥炲艱〃紺哄叾浠栫▼搴忓鐞嗘秷鎭悗鐨勮繑鍥炲箋?/span>
浣跨敤榪欎袱涓彂閫佹秷鎭嚱鏁扮殑鏈閲嶈鐨勬槸瑕佺湅浣犵殑紼嬪簭鏄惁瑕佸娑堟伅鐨勬粸鍚庢у叧娉ㄥ惁,PostMessage浼?xì)閫犳垚娑堟伅鐨勬粸鍚庢?/span>,鑰?/span>SendMessage鍒欎笉浼?/span>,浣嗗

if(!m_dcMemory.CreateCompatibleDC(NULL)) // CDC m_dcMemory;
{
::PostQuitMessage(0);
}
2)銆佸垱寤轟綅鍥撅細(xì)CreateCompatibleBitmap()
m_Bmp.CreateCompatibleBitmap(&m_dcMemory, rt.Width(), rt.Height()); // CBitmap m_Bmp;
3)銆佹妸浣嶅浘閫夊叆璁懼鐜錛歋electObject()錛屽彲浠ョ悊瑙d負(fù)閫夋嫨鐢誨竷
::SelectObject(m_dcMemory.GetSafeHdc(), m_Bmp);
4)銆佹妸緇樺埗濂界殑鍥懼艦“鎷瘋礉“鍒板睆騫曚笂錛欱itBlt()
pdcView->BitBlt(0, 0, rt.Width(), rt.Height(), &m_dcMemory, 0, 0, SRCCOPY);
鍑芥暟鐨勫叿浣撶敤娉曡瑙?MSDN銆傛湁涓鍙ヨ瘽鎴戦噸澶嶄簡(jiǎn)澶氶亶錛屽啀璇翠竴閬嶄篃鏃犲Θ錛歁SDN鏄渶濂界殑鑰佸笀銆?br>
2 SM_CLEANBOOT 榪斿洖緋葷粺鍚姩鏂瑰紡:
銆銆0 姝e父鍚姩
銆銆1 瀹夊叏妯″紡鍚姩
銆銆2 緗戠粶瀹夊叏妯″紡鍚姩
3 SM_CMONITORS CE緋葷粺鏄劇ず妯″潡鐨勪釜鏁?(CE>=4.0)
4銆SM_CMOUSEBUTTONS 榪斿洖鍊間負(fù)緋葷粺鏀寔鐨勯紶鏍囬敭鏁幫紝榪斿洖0錛屽垯緋葷粺涓病鏈夊畨瑁呴紶鏍囥?/p>
5銆SM_CXBORDER,銆SM_CYBORDER 榪斿洖浠ョ浉绱犲間負(fù)鍗曚綅鐨刉indows紿楀彛杈規(guī)鐨勫搴﹀拰楂樺害錛屽鏋淲indows鐨勪負(fù)3D褰㈡侊紝鍒欑瓑鍚屼簬SM_CXEDGE鍙傛暟
6銆SM_CXCURSOR,SM_CYCURSOR 榪斿洖浠ョ浉绱犲間負(fù)鍗曚綅鐨勬爣鍑嗗厜鏍囩殑瀹藉害鍜岄珮搴?/p>
7銆SM_CXDLGFRAME,SM_CYDLGFRAME 絳夊悓涓嶴M_CXFIXEDFRAME and SM_CYFIXEDFRAME
8銆SM_CXDOUBLECLK,SM_CYDOUBLECLK 浠ョ浉绱犲間負(fù)鍗曚綅鐨勫弻鍑?yán)L湁鏁堢殑鐭╁艦鍖哄煙
9銆SM_CXEDGE,SM_CYEDGE 浠ョ浉绱犲間負(fù)鍗曚綅鐨?D杈規(guī)鐨勫搴﹀拰楂樺害
10 SM_CXFIXEDFRAME,SM_CYFIXEDFRAME 鍥寸粫鍏鋒湁鏍囬?shù)絾鏃犳硶鏀瑰彉灏哄鐨劷H楀彛錛堥氬父鏄竴浜涘璇?br>
妗嗭級(jí)鐨勮竟妗嗙殑鍘氬害
11銆SM_CXFRAME,SM_CYFRAME 絳夊悓浜嶴M_CXSIZEFRAME and SM_CYSIZEFRAME
12銆SM_CXFULLSCREEN,SM_CYFULLSCREEN 鍏ㄥ睆騫曠獥鍙g殑紿楀彛鍖哄煙鐨勫搴﹀拰楂樺害
13銆SM_CXHSCROLL,SM_CYHSCROLL 姘村鉤婊氬姩鏉$殑楂樺害鍜屾按騫蟲粴鍔ㄦ潯涓婄澶寸殑瀹藉害
14銆SM_CXHTHUMB 浠ョ浉绱犱負(fù)鍗曚綅鐨勬按騫蟲粴鍔ㄦ潯涓婄殑婊戝姩鍧楀搴?/p>
15銆SM_CXICON,SM_CYICON 緋葷粺緙虹渷鐨勫浘鏍囩殑楂樺害鍜屽搴︼紙涓鑸負(fù)32*32錛?/p>
16銆SM_CXICONSPACING,SM_CYICONSPACING 浠ュぇ鍥炬爣鏂瑰紡鏌ョ湅Item鏃跺浘鏍囦箣闂寸殑闂磋窛錛岃繖涓窛紱?br>
鎬繪槸澶т簬絳変簬SM_CXICON 鍜孲M_CYICON.
17銆SM_CXMAXIMIZED,SM_CYMAXIMIZED 澶勪簬欏跺眰鐨勬渶澶у寲紿楀彛鐨勭己鐪佸昂瀵?/p>
18銆SM_CXMAXTRACK,SM_CYMAXTRACK 鍏鋒湁鍙敼鍙樺昂瀵歌竟妗嗗拰鏍囬鏍忕殑紿楀彛鐨勭己鐪佹渶澶у昂瀵革紝濡傛灉紿?br>
鍙eぇ浜庤繖涓昂瀵革紝紿楀彛鏄笉鍙Щ鍔ㄧ殑銆?/p>
19銆SM_CXMENUCHECK,SM_CYMENUCHECK 浠ョ浉绱犱負(fù)鍗曚綅璁$畻鐨勮彍鍗曢変腑鏍囪浣嶅浘鐨勫昂瀵?/p>
20銆SM_CXMENUSIZE,SM_CYMENUSIZE 浠ョ浉绱犺綆楃殑鑿滃崟鏍忔寜閽殑灝哄
20銆SM_CXMIN,SM_CYMIN 紿楀彛鎵鑳借揪鍒扮殑鏈灝忓昂瀵?/p>
21銆SM_CXMINIMIZED,SM_CYMINIMIZED 姝e父鐨勬渶灝忓寲紿楀彛鐨勫昂瀵?/p>
22銆SM_CXMINTRACK,SM_CYMINTRACK 鏈灝忚窡韙窛紱伙紝褰撲嬌鐢ㄨ呮嫋鍔ㄧ獥鍙gЩ鍔ㄨ窛紱誨皬浜庤繖涓鹼紝
紿楀彛涓嶄細(xì)縐誨姩銆?/p>
23銆SM_CXSCREEN,SM_CYSCREEN 浠ョ浉绱犱負(fù)鍗曚綅璁$畻鐨勫睆騫曞昂瀵搞?/p>
24銆SM_CXSIZE,SM_CYSIZE 浠ョ浉绱犺綆楃殑鏍囬鏍忔寜閽殑灝哄
25銆SM_CXSIZEFRAME,SM_CYSIZEFRAME 鍥寸粫鍙敼鍙樺ぇ灝忕殑紿楀彛鐨勮竟妗嗙殑鍘氬害
26銆SM_CXSMICON,SM_CYSMICON 浠ョ浉绱犺綆楃殑灝忓浘鏍囩殑灝哄錛屽皬鍥炬爣涓鑸嚭鐜板湪紿楀彛鏍囬鏍忎笂銆?/p>
27銆M_CXVSCROLL,SM_CYVSCROLL 浠ョ浉绱犺綆楃殑鍨傜洿婊氬姩鏉$殑瀹藉害鍜屽瀭鐩存粴鍔ㄦ潯涓婄澶寸殑楂樺害
28銆SM_CYCAPTION 浠ョ浉绱犺綆楃殑鏅氱獥鍙f爣棰樼殑楂樺害
29銆SM_CYMENU 浠ョ浉绱犺綆楃殑鍗曚釜鑿滃崟鏉$殑楂樺害
30銆SM_CYSMCAPTION 浠ョ浉绱犺綆楃殑紿楀彛灝忔爣棰樻爮鐨勯珮搴?/p>
31銆SM_CYVTHUMB 浠ョ浉绱犺綆楃殑鍨傜洿婊氬姩鏉′腑婊氬姩鍧楃殑楂樺害
32銆SM_DBCSENABLED 濡傛灉涓篢RUE鎴栦笉涓?鐨勫艱〃鏄庣郴緇熷畨瑁呬簡(jiǎn)鍙屽瓧鑺傜増鏈殑USER.EXE,涓篎ALSE鎴?
鍒欎笉鏄?/p>
33銆SM_DEBUG 濡傛灉涓篢RUE鎴栦笉涓?鐨勫艱〃鏄庣郴緇熷畨瑁呬簡(jiǎn)debug鐗堟湰鐨刄SER.EXE,涓篎ALSE鎴?鍒欎笉鏄?/p>
34銆SM_MENUDROPALIGNMENT 濡傛灉涓篢RUE鎴栦笉涓?鐨勫間笅鎷夎彍鍗曟槸鍙沖榻愮殑鍚﹀垯鏄乏瀵歸綈鐨勩?/p>
35銆SM_MOUSEPRESENT 濡傛灉涓篢RUE鎴栦笉涓?鐨勫煎垯瀹夎浜?jiǎn)榧犳爣锛屽惁鍒欐病鏈夊畨瑁呫?/p>
36銆SM_MOUSEWHEELPRESENT 濡傛灉涓篢RUE鎴栦笉涓?鐨勫煎垯瀹夎浜?jiǎn)婊氳疆榧犳爣锛屽惁鍒欐病鏈夊畨瑁呫?Windows NT only)
37銆SM_SWAPBUTTON 濡傛灉涓篢RUE鎴栦笉涓?鐨勫煎垯榧犳爣宸﹀彸閿氦鎹紝鍚﹀垯娌℃湁銆?/p>
RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\ODBC\\ODBC.INI",0,KEY_READ,&hKey);
DWORD dwSubKeyCount,dwMaxSubKeyNameLength;
RegQueryInfoKey(hKey,NULL,NULL,NULL,&dwSubKeyCount,&dwMaxSubKeyNameLength,NULL,NULL,NULL,NULL,NULL,NULL);
long index = 0;
char* szSubKeyName = new char[dwMaxSubKeyNameLength+1];
DWORD dwSubKeyName;
for (index=0;index<(long)dwSubKeyCount;index++)
{
RegEnumKeyEx(hKey,index,szSubKeyName,&dwSubKeyName,NULL,NULL,NULL,NULL);
}
RegCloseKey(hKey);
RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\ODBC\\ODBC.INI\\ODBC Data Sources",0,KEY_READ,&hKey);
DWORD dwValueCount,dwMaxValueNameLength;
RegQueryInfoKey(hKey,NULL,NULL,NULL,NULL,NULL,NULL,&dwValueCount,&dwMaxValueNameLength,NULL,NULL,NULL);
char* szValueName = new char[dwMaxValueNameLength+1];
DWORD dwValueName;
for (index=0;index<(long)dwValueCount;index++)
{
RegEnumValue(hKey,index,szValueName,&dwValueName,NULL,NULL,NULL,NULL);
}
RegCloseKey(hKey);
hKey
褰撳墠鎵撳紑閿殑鍙ユ焺鎴栦笅鍒楅瀹氫箟淇濈暀鐨勫彞鏌勫?
HKEY_CLASSES_ROOT
HKEY_CURRENT_CONFIG
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
samDesired
鍒跺畾涓涓闂爣璁頒互鎻忚堪璁塊棶鏂伴敭鐨勫畨鍏ㄦ?br>
姝ゅ弬鏁板彲浠ユ槸涓嬪垪鍊肩殑涓涓仈鍚?nbsp;
KEY_ALL_ACCESS
KEY_QUERY_VALUE, KEY_ENUMERATE_SUB_KEYS, KEY_NOTIFY, KEY_CREATE_SUB_KEY, KEY_CREATE_LINK, 鍜?nbsp;KEY_SET_VALUE 璁塊棶鐨勮仈鍚?
KEY_CREATE_LINK
鍏佽鍒涘緩涓ユ牸絎﹀彿鐨勯摼鎺?
KEY_CREATE_SUB_KEY
鍏佽鍒涘緩瀛愰敭.
KEY_ENUMERATE_SUB_KEYS
鍏佽鏋氫婦瀛愰敭.
KEY_EXECUTE
鍏佽璇昏闂?
KEY_NOTIFY
鍏佽鏀瑰彉閫氱煡.
KEY_QUERY_VALUE
鍏佽鏌ヨ瀛愰敭鐨勬暟鎹?
KEY_READ
KEY_QUERY_VALUE, KEY_ENUMERATE_SUB_KEYS, 鍜?nbsp;KEY_NOTIFY 璁塊棶鐨勮仈鍚?
KEY_SET_VALUE
鍏佽璁劇疆瀛愰敭鐨勬暟鎹?
KEY_WRITE
KEY_SET_VALUE 鍜?nbsp;KEY_CREATE_SUB_KEY 璁塊棶鐨勮仈鍚? 

LONG RegOpenKeyEx(
HKEY hKey, // 寰呮墦寮鐨勯敭鐨勫彞鏌?/span>
LPCTSTR lpSubKey, // 寰呮墦寮鐨勫瓙閿悕縐扮殑鍦板潃
DWORD ulOptions, // 淇濈暀鐨?蹇呴』涓?.
REGSAM samDesired, // 瀹夊叏璁塊棶鏍囪
PHKEY phkResult // 寰呮墦寮鐨勯敭鐨勫彞鏌勭殑鍦板潃
);
LONG RegQueryInfoKey(
HKEY hKey, // 寰呮煡璇㈢殑閿殑鍙ユ焺
LPTSTR lpClass, // 綾誨瓧絎︿覆緙撳啿鍣ㄥ湴鍧
LPDWORD lpcbClass, // 綾誨瓧絎︿覆緙撳啿鍣ㄥぇ灝忕殑鍦板潃
LPDWORD lpReserved, // 淇濈暀鐨?蹇呴』涓?nbsp;NULL.
LPDWORD lpcSubKeys, // 瀛愰敭鏁扮洰緙撳啿鍣ㄧ殑鍦板潃
LPDWORD lpcbMaxSubKeyLen, // 鏈闀跨殑瀛愰敭鍚嶇О闀垮害緙撳啿鍣ㄧ殑鍦板潃
LPDWORD lpcbMaxClassLen, // 鏈闀跨殑綾誨瓧絎︿覆闀垮害緙撳啿鍣ㄧ殑鍦板潃
LPDWORD lpcValues, // 鍊奸」鏁扮洰緙撳啿鍣ㄧ殑鍦板潃
LPDWORD lpcbMaxValueNameLen, // 鏈闀跨殑鍊煎悕縐伴暱搴︾紦鍐插櫒鐨勫湴鍧
LPDWORD lpcbMaxValueLen, // 鏈闀跨殑鍊兼暟鎹暱搴︾紦鍐插櫒鐨勫湴鍧
LPDWORD lpcbSecurityDescriptor, // 瀹夊叏鎻忚堪絎﹂暱搴︾紦鍐插櫒鐨勫湴鍧
PFILETIME lpftLastWriteTime // 鏈榪戝啓鍏ユ椂闂寸紦鍐插櫒鐨勫湴鍧
);
LONG RegEnumKeyEx(
HKEY hKey, // 寰呮灇涓劇殑閿殑鍙ユ焺
DWORD dwIndex, // 寰呮灇涓劇殑瀛愰敭鐨勭儲(chǔ)寮?/span>
LPTSTR lpName, // 瀛愰敭鍚嶇О緙撳啿鍣ㄧ殑鍦板潃
LPDWORD lpcbName, // 瀛愰敭緙撳啿鍣ㄥぇ灝忕殑鍦板潃
LPDWORD lpReserved, // 淇濈暀鐨?蹇呴』涓?nbsp;NULL.
LPTSTR lpClass, // 綾誨瓧絎︿覆緙撳啿鍣ㄧ殑鍦板潃
LPDWORD lpcbClass, // 綾葷紦鍐插櫒澶у皬鐨勫湴鍧
PFILETIME lpftLastWriteTime // 閿殑鏈榪戝啓鍏ユ椂闂寸殑鍦板潃
);SendMessage( (HWND) hWnd, // handle to destination window WM_SETFONT, // message to send (WPARAM) wParam, // handle to font (LPARAM) lParam // redraw option );MSDN 閲岄潰SendMessage() 閲岄潰浣跨敤WM_SETFONT鍙傛暟 wParam 蹇呴』浣跨敤鑷繁瀹氫箟鐨凢ONT鐨勫彞鏌勶紝鑰屼笉鏄嬌鐢?FONT 瀹氫箟鐨勫唴瀹廣傛墍浠ラ敊璇彂鐢熷湪錛?br>(WPARAM)(&ResultFont) 鑰屽簲璇ヤ嬌鐢?(WPARAM)(&ResultFont)->GetSafeHandle()銆?br>
鍏舵牸寮忎竴鑸槸錛?#pragma paramenter
鍏朵腑錛?paramenter 鏄弬鏁?/p>
錛?錛?message 鍙傛暟錛?瀹冭兘澶熷湪緙栬瘧淇℃伅杈撳嚭紿楀彛涓緭鍑虹浉搴旂殑淇℃伅錛?br>榪欏浜庢簮浠g爜淇℃伅鐨勬帶鍒舵槸闈炲父閲嶈鐨勶紝浣跨敤鏂規(guī)硶鏄細(xì)
#pragma message("娑堟伅鏂囨湰")
褰撶紪璇戝櫒閬囧埌榪欐潯鎸囦護(hù)鐨勬椂鍊欏氨鍦ㄧ紪璇戜俊鎭緭鍑虹獥鍙h緭鍑虹浉搴旂殑淇℃伅,鎶婃秷鎭枃鏈墦鍗板嚭鏉?
褰撴垜浠湪紼嬪簭涓畾涔変簡(jiǎn)璁稿瀹忔潵鎺у埗婧愪唬鐮佺増鏈殑鏃跺?鎴戜滑鑷繁鏈夊彲鑳介兘浼?xì)蹇樿鏈夋病鏈夋纭畡〗畼q欎簺瀹?
姝ゆ椂鎴戜滑鍙互鐢ㄨ繖鏉℃寚浠ゅ湪緙栬瘧鐨勬椂鍊欏氨榪涜媯(gè)鏌?鍋囪鎴戜滑甯屾湜鍒ゆ柇鑷繁鏈夋病鏈夊湪婧愪唬鐮佺殑浠涔堝湴鏂瑰畾涔変簡(jiǎn) _X86榪欎釜
瀹忓彲浠ヤ嬌鐢ㄤ笅闈㈢殑鏂規(guī)硶:
#ifdef _X86
#pragma message("_X86 macro activited")
#endif
濡傛灉鎴戜滑瀹氫箟浜?jiǎn)_X86榪欎釜瀹?搴旂敤紼嬪簭鍦ㄧ紪璇戞槸灝變細(xì)鍦ㄧ紪璇戣緭鍑烘鏄劇ず:"_X86 macro activited",鎴戜滑
灝變笉浼?xì)鍥犱给檱纷兏嶈寰楁槸鍚﹀畾涔夎岃嫤鎭間簡(jiǎn).
(2) 鍙﹀涓涓嬌鐢ㄥ緱姣旇緝澶氱殑pragma 鍙傛暟鏄痗ode_seg 鏍煎紡濡?
#pragma code_seg ([[{push|pop},][identifier,]]["section-name"["sectin class"]])
瀹冭兘澶熻緗▼搴忎腑鍑芥暟浠g爜瀛樻斁鐨勪唬鐮佹(浣嶇疆).(鍙︽敞:璇ュ弬鏁板彲浠ョ敤鏉ユ寚瀹氬湪*.obj 鏂囦歡涓瓨鏀劇殑鑺?
瑙傚療 *.obj鍙互浣跨敤VC鑷甫鐨刣umpbin鍛戒護(hù)琛岀▼搴?鍑芥暟鍦?.obj鏂囦歡涓粯璁ょ殑瀛樻斁瀛楄妭鏄?.text鑺?
濡傛灉code_seg 娌℃湁甯﹀弬鏁扮殑璇?鍒欏嚱鏁板瓨鏀懼湪 .text鑺?br>push [鍙夊弬鏁癩 灝嗕竴涓褰曟斁鍒板唴閮ㄧ紪璇戝櫒鐨勫爢鏍堜腑,鍙夊弬鏁?identifier鍙互鏄竴涓爣璇嗙鎴栬呰妭鍚?
pop [鍙夊弬鏁癩 灝嗕竴涓褰曚粠鍫嗘爤鐨勯《绔脊鍑?鍙夊弬鏁?identifier 鍙互涓轟竴涓爣璇嗙鎴栬呰妭鍚?
鍙夊弬鏁?identifier,褰撲嬌鐢≒USH鎸囦護(hù)鏃跺?涓哄帇鍏ュ爢鏍堢殑璁板綍鎸囨淳涓涓爣璇嗙,褰撹鏍囪瘑絎﹁鍒犻櫎鐨勬椂鍊欏拰
鍏剁浉鍏崇殑鍫嗘爤涓殑璁板綍灝嗚寮瑰嚭鍫嗘爤.
"segment-name" [鍙夊弬鏁癩 琛ㄧず鍑芥暟瀛樻斁鐨勮妭鍚?
渚嬪:
榛樿鎯呭喌涓?鍑芥暟琚瓨鏀懼湪.text涓?
void func1(){ //stored in .text
}
灝嗗嚱鏁板瓨鏀懼埌鑺?.my data涓?br>#pragma code_seg(".my data1")
void func2()[ stored in my data
}
//r1涓烘爣蹇楃,灝嗗嚱鏁版斁鍏?my data2鑺備腑
#pragma code_seg (push,r1,".my data2")
void func3(){ //stored in my data2
}
(3) #pragma once 榪欐槸涓涓瘮杈冨父鐢ㄧ殑鎸囦護(hù),鍙鍦ㄥご鏂囦歡鐨勬渶寮濮嬪姞鍏ヨ繖鏉℃寚浠ゅ氨鑳藉淇濊瘉澶存枃浠惰緙栬瘧涓嬈?
榪欐潯鎸囦護(hù)鍦╒C6閲岄潰灝辨湁,瑕佽冭檻鍒板吋瀹規(guī)?
(4) #pragma hdrstop 琛ㄧず棰勭紪璇戝埌嬈′負(fù)姝?瀵瑰悗闈㈢殑澶存枃浠朵笉鍦ㄨ繘琛岄緙栬瘧.
BCB鍙互棰勭紪璇戝ご鏂囦歡鍔犲揩閾炬帴鐨勯熷害,浣嗘槸濡傛灉鎵鏈夊ご鏂囦歡閮借繘琛岄緙栬瘧鍙兘鍗犳湁澶紓佺洏絀洪棿,鎵浠ヤ嬌鐢?br>榪欎釜閫夐」鎺掗櫎涓浜涘ご鏂囦歡.
鏈夋椂鍊欏崟鍏冧箣闂存湁渚濊禆鍏崇郴,姣斿鍗曞厓A渚濊禆鍗曞厓B,鎵浠ュ崟鍏傿瑕佸厛浜庡崟鍏傾緙栬瘧. 鍙互鐢?pragma startup 鎸囧畾緙栬瘧浼樺厛綰?
濡傛灉浣跨敤浜?pragma package(smart_init),BCB灝變細(xì)鏍規(guī)嵁浼樺厛綰х殑澶у皬鍏堝悗緙栬瘧.
(5) #pragma warning 鎸囦護(hù)
璇ユ寚浠ゅ厑璁告湁閫夋嫨鎬х殑淇敼緙栬瘧鍣ㄧ殑璀﹀憡淇℃伅琛屼負(fù).
鎸囦護(hù)鏍煎紡:
#pragma warning(warning)specifier;warning-number-list[;warning-specifier;warning-number-list..]
#pragma warning(push[n])
#pragma warning(pop)
涓昏鐢ㄥ埌鐨勮鍛婅〃紺烘湁濡備笅鍑犱釜:
once:鍙樉紺轟竴嬈?璀﹀憡/閿欒絳?娑堟伅
default:閲嶇疆緙栬瘧鍣ㄧ殑璀﹀憡琛屼負(fù)鍒伴粯璁ょ姸鎬?
1,2,3,4:鍥涗釜璀﹀憡綰у埆
disable:紱佹鎸囧畾鐨勮鍛婁俊鎭?
error:灝嗘寚瀹氱殑璀﹀憡淇℃伅璁や負(fù)鏄敊璇?
#pragma warning(disable:4507 34;once: 4385;error:164) 絳変環(huán)浜?
#pragma warning(disable:4507 34) //涓嶆樉紺?507 34 鍙瘋鍛婁俊鎭?
#pragma warning(once:4385) //4385鍙蜂俊鎭彧鏄劇ず涓嬈?
#pragma warning(error:164) // 鎶?64鍙鋒秷鎭綔涓轟竴涓敊璇?
鍚屾椂榪欎釜pragma warning涔熸敮鎸佸涓嬫牸寮?br>#pragma warning (push[,n])
#pragma warning (pop)
#pragma warning (push) //淇濆瓨鎵鏈夎鍛婃秷鎭殑鐜版湁璀﹀憡鐘舵?br>#pragma warning (push,N) //淇濆瓨鎵鏈夎鍛婃秷鎭殑鐜版湁璀﹀憡鐘舵?騫朵笖鎶婂叏灞璀﹀憡絳夌駭璁懼畾涓簄;
#pragma warning (pop) //鍚戞爤涓脊鍑烘渶鍚庝竴涓鍛婃秷鎭?鍦ㄥ叆鏍堝拰鍑烘爤涔嬮棿鍋氱殑涓鍒囨敼鍔ㄥ彇娑?
#pragma warning( push )
#pragma warning( disable : 4705 )
#pragma warning( disable : 4706 )
#pragma warning( disable : 4707 )
#pragma warning( pop )
鍦ㄨ繖孌典唬鐮佺殑鏈鍚庯紝閲嶆柊淇濆瓨鎵鏈夌殑璀﹀憡淇℃伅(鍖呮嫭4705錛?706鍜?707)
鍦ㄤ嬌鐢ㄦ爣鍑咰++榪涜緙栫▼鐨勬椂鍊欑粡甯鎬細(xì)寰楀埌寰堝鐨勮鍛婁俊鎭?鑰岃繖浜涜鍛婁俊鎭兘鏄笉蹇呰鐨勬彁紺?
鎵浠ユ垜浠彲浠ヤ嬌鐢?pragma warning(disable:4786)鏉ョ姝㈣綾誨瀷鐨勮鍛?br>鍦╲c涓嬌鐢ˋDO鐨勬椂鍊欎篃浼?xì)寰楀堫C笉蹇呰鐨勮鍛婁俊鎭?榪欎釜鏃跺欐垜浠彲浠ラ氳繃
#pragma warning(disable:4146)鏉ユ秷闄よ綾誨瀷鐨勮鍛婁俊鎭?/p>
(6)#pragma comment(...)
#pragma comment("comment-type"[,commentstring])
璇ユ寚浠ゅ皢涓涓敞閲婅褰曟斁鍏ヤ竴涓璞℃枃浠舵垨鍙墽琛屾枃浠朵腑 comment-type 綾誨瀷 one of the five
compiler:灝嗙紪璇戝櫒鐨勭増鏈彿鍜屽悕縐版斁鍏ョ洰鏍囨枃浠朵腑錛屾湰鏉℃敞閲婅褰曞皢琚紪璇戝櫒蹇界暐錛屽鏋滀綘涓鴻璁板綍綾誨瀷
鎻愪緵浜?jiǎn)commentstring 鍙傛暟錛岀紪璇戝櫒灝嗕駭鐢熶竴涓鍛婏紝
EX錛?#pragma comment (compiler)
exestr:灝哻ommentstring 鍙傛暟鏀懼叆鐩爣鏂囦歡涓紝鍦ㄩ摼鎺ョ殑鏃跺欒繖涓瓧絎︿覆灝嗚鏀懼叆鍒板彲鎵ц鏂囦歡涓紝褰撴搷
浣滅郴緇熷姞杞藉彲鎵ц鏂囦歡鏃訛紝璇ュ弬鏁板瓧絎︿覆涓嶄細(xì)琚姞杞藉埌鍐呭瓨?shù)腑锛屼絾鏄Q岃鍙傛暟瀛楃涓插彲浠ヨdumpbin涔嬬被鐨勭殑
紼嬪簭鏌ユ壘騫舵墦鍗板嚭鏉ワ紝浣犲彲浠ョ敤榪欎釜鏍囧織絎﹀彿灝嗙増鏈箣綾葷殑淇℃伅娼滃叆鍒板彲鎵ц鏂囦歡涓?/p>
lib:榪欐槸涓涓潪甯稿父鐢ㄧ殑鍏抽敭瀛楋紝鍙互甯垜浠繛鍏ヤ竴涓簱鏂囦歡鍒扮洰鏍囨枃浠躲?br>ex:
#pragma comment(lib,"userlib.lib")
linker:
灝嗕竴涓摼鎺ラ夐」鏀懼叆鐩爣鏂囦歡涓紝浣犲彲浠ヤ嬌鐢ㄨ繖涓寚浠ゆ潵浠f浛鍛戒護(hù)琛屼紶鍏ョ殑鎴栧垯鍦ㄥ紑鍙戠幆澧冧腑璁劇疆鐨勯摼鎺?br>閫夐」錛屼綘鍙互鎸囧畾/include 閫夐」鏉ュ己鍒跺寘鍚煇涓璞?br>ex:
#pragma comment(linker,"/include:_mySymbol")
浣犲彲浠ュ湪紼嬪簭涓緗笅鍒楅摼鎺ラ夐」錛?br> /DEFAULTLIB
/EXPORT
/INCLUDE
/MERGE
/SECTION
璇︽儏璇峰弬鑰僲sdn
user: 灝嗕竴鑸殑娉ㄩ噴淇℃伅鏀懼叆鐩爣鏂囦歡涓紝commentstring 鍙傛暟鍖呭惈娉ㄩ噴鐨勬枃鏈俊鎭紝榪欎釜娉ㄩ噴璁板綍灝嗚
閾炬帴鍣ㄥ拷鐣ャ?br>ex:
#pragma comment(user,"compiled on " _DATE" at "_TIMER_")
浣跨敤#pragma 瀵煎嚭 DLL 鍑芥暟
浼犵粺鐨勫鍑篋LL鍑芥暟鐨勬柟娉曟槸浣跨敤妯″潡瀹氫箟鏂囦歡(.def),Visual C++ 鎻愪緵浜?jiǎn)鏇唇巰媧佹柟渚跨殑鏂規(guī)硶,閭e氨
鏄?_declspec()" 鍏抽敭瀛楀悗闈㈣窡"dllexport",鍛婅瘔閾炬帴鍘誨鍑?guó)櫩欎釜鍑芥?
渚嬪 :
_declspec(dllexport) int _stdcall MyExportFunction(int iTest);
鎶?__declspec(dllexport)"鏀懼湪鏈鍓嶉潰澹版槑,榪炴帴鐢熸垚鐨凞LL 灝變細(xì)瀵煎嚭鍑芥暟"_MyExportFunction@4".
涓婇潰瀵煎嚭鐨勫嚱鏁板悕縐頒篃璁鎬笉鏄垜浠笇鏈涚殑,鎴戜滑甯屾湜瀵煎嚭鍘熺増"鐨?MyExportFunction". 鍙互鎸囧畾鐢╒C
鎻愪緵鐨?#pragma"鎸囦護(hù)鏉ユ寚瀹氶摼鎺ラ夐」.
ex:
#pragma comment(linker,"/EXPORT:MyExportFunction=_MyExportFunction@4")
鍘熷艦: /EXPORT:entryname[,@ordinal[,NONAME]][,DATA]
@ordinal 鎸囧畾欏哄簭;NONAME 鎸囧畾鍙皢鍑芥暟瀵煎嚭涓哄簭鍙?DATA鍏抽敭瀛楁寚瀹氬鍑洪」涓烘暟鎹」.