久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区

以文本方式查看主題

-  曙海教育集團論壇  (http://www.rfoamep.cn/bbs/index.asp)
--  C++語言開發  (http://www.rfoamep.cn/bbs/list.asp?boardid=63)
----  C++附帶的C語言運行時庫  (http://www.rfoamep.cn/bbs/dispbbs.asp?boardid=63&id=2431)

--  作者:wangxinxin
--  發布時間:2010-12-10 14:50:17
--  C++附帶的C語言運行時庫

第一部分:基礎

 

微軟在其Visual C++產品中包含了一套C語言運行時庫,它的其它庫產品大多基于這一套庫(比如MFC)。在特殊的場合,我們可能需要使用自己的運行時庫來替代它。比如,某一些對于注重系統綜合性能的游戲。那時,我們只需要實現運行時庫中的某一些功能,甚至可以不按照標準來命名(因為那是你自己的運行庫,并且你不打算發布她)。比方說C語言運行時的內存分配函數,常用的不外乎malloccallocfreerealloc這幾個,我們實現的時候就沒有必要遵照以上的名字命名我們的相應功能的函數。

在替代運行庫以前必須認識到的是,許多基于運行庫的函數庫將不能再使用,比如剛才提到的(MFC)庫,而你在以前編寫的許多庫可能不能再使用,這意味著你可能要白手起家。(需要說明的是:ATL庫基本沒有使用C語言運行時庫,所以可以繼續使用,前提是使用時不要連接MFC)。

 

 

1.    基本概念

我們平時接觸VC++的時候,第一個接觸到的恐怕是WinMainmain,對應于Win32子系統的Windows窗口系統和控制臺兩個部分,最多是某些書籍上談到了對應多字節字符集的幾個變種。其實,這幾個入口點函數是VC++帶有的C運行庫要求的入口點。真正的vc程序的入口點函數是在使用VC++C編譯器編譯程序時指定的。它可以是符合下面形式的任何名稱的函數:

void __cdecl Your_Entry (void);

如果你喜歡,你可以起一個更加藝術的名字。

說到這里,給出一個樣例程序可以更好的理解這個入口點函數和我們平時接觸的C運行時入口點函數之間有些什么。這是一個什么都不做的程序

 

// VC++ Entry point

void MyEntry (void);

{

{

 

將這些個字符敲在一個文本文件中,保存為:d:\\test0.c

 

然后在VC++命令提示符環境中鍵入下面的步驟來編譯、連接這個程序(在上一個版本中,我把這個部分漏了,這可能使得不少人看了這篇文章卻不知道如何實現):

l         進入VC++bin目錄,缺省安裝下,它應該在如下的目錄中:

C:\\Program files\\Microsoft Visual Studio\\VC98\\Bin

然后運行vcvars32.bat批處理文件,如下圖所示:

注意:我的機子上的目錄可能和你的不一樣。

 

屏幕會提示順利設置了vc的環境變量。

 

l         然后用下面的命令編譯上面的代碼文件

d:\\

cl /c test0.c /nologo

如果沒有什么提示而很快的出現命令提示符,則表示編譯成功。

l         然后用下面的命令連接

link /ENTRY:”MyEntry” /OUT:test0.exe /SUBSYSTEM:WINDOWS /NODEFAULTLIB test0.obj /nologo

不出什么意外的話,在D分區上應該有一個test0.exe文件,雙擊它發現什么也沒有出現。但是,其實它是一個不折不扣的Win32應用程序。你可以用相應工具來測試它,可以發現在入口點處是幾個符合C函數調用規則的幾個壓棧、數據轉移、和出棧指令。

上面用到的一些cllink程序開關選項的意義請參考MSDN

 

值得提一提的是:缺省情況下,link程序連接了4C運行時庫中的某一個,并且將函數mainCRTStartupwmainCRTStartupWinMainCRTStartupwWinMainCRTStartup中的一個作為缺省的入口點(我們這里只討論非動態連接庫,也就是一般的可執行印象)。具體使用哪個,是根據link命令行中指定的子系統。可以參考MSDN獲取更詳細的說明。

 

2.    Microsoft C/C++ Runtime Library

有了上面這些基礎,我們接著再看一看Microsoft C/C++ Runtime Library在入口點處都作了些什么。我這里給出的代碼是經過篩選的,只是為了說明問題,這些代碼在VC安裝目錄中CRT\\SRC下面的crt0.c中,缺省沒有安裝。

 

#undef _UNCODE

void WinMainCRTStartup (void)

{

int mainret;

 

STARTUPINFO StartupInfo;

_osver = GetVersion ();

 

_winminor = (osver >>8) & 0x00FF;

_winmajor = _osver & 0x00FF;

_winver = (winmajor << 8) + _winminor;

osver = (osver >> 16) & 0x00FFFF;

 

if (!_heap_init (1))

fast_error_exit (_RT_HEAPINIT);

 

_acmdln = (char*) GetCommandLineA ();

_aenvptr = (char*) __crtGetEnvironmentStringsA ();

_setargv ();

_setenvp ();

 

_cinit ();

 

StartupInfo.dwFlags = 0;

GetStartupInfo (&StartupInfo);

 

mainret = WinMain (GetModuleHandleA (NULL),

NULL,

;pszCommandLine,

StartupInfo.dwFlags & STARTF_USESHOWWINDOWS ?

StartupInfo.wShowWindow : SW_SHOWDEFAULT);

 

exit (mainret);

}

 

上面的代碼經過篩選,它用于多線程下,普通的多字符集C運行時。我稍微解釋一下代碼的含義,它完成以下任務:

l         獲取操作系統的版本信息,用于以后的操作;

l         然后初始化進程堆棧;

l         獲取命令行,獲取和設置環境變量;

l         C運行時內部變量的初始化;

l         調用標準Win32窗口程序入口點函數(它應該是在你的應用程序中被定義和實現的);

l         調用ExitProcess函數退出應用程序,退出代碼是WinMain的返回值。

具體的代碼請參見運行庫的源代碼。

 

3.    不使用運行庫編寫自己的應用邏輯

接著,我們來試試看,不使用C運行庫,并且使得我們的應用程序做些個事情。請看下面的代碼:

 

// 程序init.c

#pragma once

#include <windows.h>

 

void entry (void)

{

       char** p;

       char* pAlloc;

 

       char* pszNames[] = {

              "SNK",

              "Capcom",

              "Nintindo",

              "EA",

              "3DO",

              NULL

       };

 

       for (p = pszNames; *p != NULL; p ++)

       {

              MessageBox (0, *p, 0, MB_OK);

       }

 

       pAlloc = VirtualAlloc (0, 4096, MEM_COMMIT | MEM_TOP_DOWN, PAGE_READWRITE);

       if (pAlloc)

       {

              const char* pText = "Hello, world!";

              char* pTemp = (char*) pText, *pstr = pAlloc;

              for (;*pTemp != \'\\0\';) *pstr++ = *pTemp++;

              *pstr = *pTemp;

              MessageBox (0, pAlloc, 0, MB_OK);

              VirtualFree (pAlloc, 4096, MEM_RELEASE);

       }

}

 

使用下面的命令行來編譯連接它

cl init.c /c

link init.obj /SUBSYSTEM:WINDOWS /OUT:init.exe /ENTRY:”entry” /NODEFAULTLIB kernel32.lib user32.lib

生成的init.exe程序的運行中界面如下:

                          


久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区
精品国产在天天线2019| 色狠狠桃花综合| 国产91丝袜在线播放| 国产米奇在线777精品观看| 国模一区二区三区白浆| 成人一区二区三区中文字幕| 97精品久久久午夜一区二区三区| 高清不卡日本v二区在线| 久久综合久久综合这里只有精品| 亚洲精品乱码久久久久久蜜桃91 | 日韩欧美精品在线不卡| 伊人婷婷久久| 91麻豆精品国产91| 亚洲国产精品成人综合色在线婷婷 | 亚洲成av人片www| 蜜桃视频免费观看一区| 国产91综合一区在线观看| 国产精品久久久久久久天堂第1集| 热re99久久精品国产99热| 在线观看日韩国产| 久久精品夜色噜噜亚洲aⅴ| 亚洲自拍欧美精品| 国产成人自拍网| 久久综合中文色婷婷| 欧美日韩亚洲高清一区二区| 久久嫩草精品久久久精品一| 亚洲一区二区影院| 成人精品国产免费网站| 日本一区二区三区免费观看| 欧美高清视频一二三区 | 国产成人精品免费一区二区| 国产99在线免费| 91精彩视频在线| 国产午夜亚洲精品理论片色戒| 亚洲国产你懂的| 不卡免费追剧大全电视剧网站| 免费国产一区二区| 日韩一区二区在线看| 亚洲与欧洲av电影| 91在线观看一区二区| 在线视频福利一区| 国产亚洲一区二区三区四区| 日韩精品每日更新| 高清一区二区三区视频| 欧美三级电影精品| 一区二区三区在线视频播放| 成人午夜伦理影院| 色悠久久久久综合欧美99| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 欧美精品第1页| 一区二区三区四区不卡视频| av午夜精品一区二区三区| 日本二三区不卡| 一区二区三区欧美亚洲| 3d动漫精品啪啪一区二区三区免费 | 国模无码大尺度一区二区三区| 久久久www免费人成黑人精品| 制服丝袜亚洲精品中文字幕| 亚洲午夜激情网站| 国产精品一区二区a| 日韩欧美在线不卡| 久久99精品国产.久久久久| 日韩高清av| 国产精品拍天天在线| 福利视频网站一区二区三区| 色美美综合视频| 亚洲综合成人网| 精品国产免费久久久久久尖叫 | 在线观看亚洲精品视频| 一区二区三区视频在线看| 丁香婷婷久久久综合精品国产 | 欧美一区二区网站| 蜜桃视频在线观看一区二区| 日韩精品另类天天更新| 综合精品久久久| 国产精品一区二区在线观看| 久久久久久久免费视频了| 成人高清在线视频| 在线成人午夜影院| 国产综合久久久久久久久久久久| 在线中文字幕一区| 日本成人在线视频网站| 亚洲一区二区四区| 亚洲成人午夜影院| 亚洲春色在线| 日韩精品1区2区3区| 一区二区三区的久久的视频| 亚洲资源中文字幕| 日本精品一区二区三区高清 久久| 国产精品久久久久久久久图文区 | 亚洲日本欧美在线| 亚洲风情在线资源站| 日韩电影免费观看高清完整| 亚洲一卡二卡三卡四卡| 亚洲永久激情精品| 美女一区二区在线观看| 欧美三级午夜理伦三级中视频| 极品少妇一区二区| 欧美一二三区在线| 91丨porny丨蝌蚪视频| 国产视频亚洲色图| 久久国产手机看片| 亚洲成a人片在线不卡一二三区| 亚洲一区二区精品在线观看| 奇米影视一区二区三区| 在线不卡的av| 99精品视频免费在线观看| 中文字幕欧美区| 久久久久久久久久码影片| 亚洲尤物视频在线| 在线亚洲+欧美+日本专区| 激情综合亚洲精品| 久久一夜天堂av一区二区三区| 国产富婆一区二区三区 | 亚洲欧美另类图片小说| 日韩欧美电影一区二区| 蜜臀国产一区二区三区在线播放 | 国产欧美在线观看一区| 免费久久久一本精品久久区| 亚洲动漫第一页| 欧美日韩亚洲综合一区二区三区| 9色porny自拍视频一区二区| 亚洲三级久久久| 色欧美88888久久久久久影院| 国产精品白丝av| 国产精品全国免费观看高清| 亚洲最新在线| 成人av在线资源网站| 亚洲乱码国产乱码精品精小说 | 国产精品传媒视频| 在线一区二区视频| 91免费精品国自产拍在线不卡| 亚洲日本在线天堂| 伊人久久大香线蕉综合75| 国产成人精品在线看| 国产精品全国免费观看高清| 色综合天天做天天爱| gogogo免费视频观看亚洲一| 一区二区三区中文在线| 欧美电影影音先锋| 久久一区二区三区欧美亚洲| 日本sm残虐另类| 国产女同互慰高潮91漫画| 一区二区视频在线播放| 91亚洲资源网| 喷水一区二区三区| 久久久久国色av免费看影院| 日本在线观看不卡| 成人深夜福利app| 亚洲第一综合色| 久久人人爽爽爽人久久久| 在线成人性视频| 91九色在线观看| 日韩在线一区二区| 国产亚洲成aⅴ人片在线观看| 中文字幕在线亚洲三区| 91精品久久久久久蜜桃| 欧美aaaaaa午夜精品| 国产精品看片你懂得 | 一区二区三区不卡视频 | 国产日韩av一区| 欧美乱妇20p| 视频一区二区精品| 成人黄视频免费| 高潮精品一区videoshd| 日韩和欧美的一区| 国产精品成人免费| 欧美一级xxx| 色偷偷久久一区二区三区| 久久本道综合色狠狠五月| 丁香婷婷深情五月亚洲| 免费观看久久久4p| 亚洲乱码一区二区三区在线观看| 日韩精品一区二区三区三区免费| 夜夜爽www精品| 欧美福利精品| 99视频免费观看| 成人午夜在线播放| 国内精品第一页| 美女视频黄免费的久久| 亚洲一二三专区| 亚洲蜜臀av乱码久久精品| 亚洲国产精品v| 久久蜜桃av一区精品变态类天堂| 欧美伦理电影网| 欧美午夜理伦三级在线观看| 亚洲自拍三区| 色综合久久久久久久久五月| 久久久久久亚洲精品不卡4k岛国| 97人人干人人| 999热视频在线观看| 成人av在线网站| 岛国精品在线播放| 国产不卡在线视频| 国产成人精品一区二| 国产高清精品网站| 国产91在线观看| 成人午夜电影久久影院| 成人一区在线观看| jiyouzz国产精品久久|