寫出每個應用程序所必有的預編譯
A. 的web應用程序項目下的文件都是什麼文件
通過發布 Web 應用程序項目,Visual Studio 可將 Web 應用程序的文件編譯到單個程序集中,然後將編譯的程序集復制到指定的位置。ASP.NET Web 應用程序項目與標準的 Visual Studio 2005 類庫項目共享相同的配置設置和行為。可將 Web 應用程序發布到本地文件夾或共享文件夾、FTP 網站或者通過 URL 訪問的網站。位於Visual Studio「生成」菜單上的「發布網站」對話框使您能夠生成和發布 Web 應用程序。另外,可以選擇從該網站刪除源代碼。這提供了保護知識產權的措施並使其他人更難訪問網站的源代碼。有關預編譯過程中您的文件所發生情況的更多信息,請參見 ASP.NET 預編譯期間的文件處理。注意「發布網站」對話框僅適用於使用 ASP.NET Web 應用程序模板創建的項目。在發布 Web 應用程序之前,請檢查原始網站的配置並注意以下幾點:必須存在於遠程位置的任何設置。具體來說,就是檢查如連接字元串、成員資格設置和其他安全設置等設置,並確保這些設置適用於生產環境。必須在發布的網站上更改的任何設置。例如,您可能希望在發布網站後禁用調試、跟蹤及自定義錯誤。由於配置設置是通過繼承而來的,因此可能需要檢查多個文件以查找所有適用的設置。除了應用程序中的任何 Web.config 文件之外,配置設置還可能位於「系統根目錄\Microsoft.NET\Framework\version\CONFIG」目錄下的 Machine.config 文件或根 Web.config 文件。如果您沒有查看根配置文件的許可權,則可以使用如何:以編程方式查看繼承的配置設置和本地配置設置中的代碼示例輸出包含您網站配置設置的完整列表的文件,該文件被格式化為標準的配置文件。有關配置設置的定義,請參見常規配置設置 (ASP.NET) 和ASP.NET 配置設置。注意若要完成下面的過程,您必須在目標位置同時擁有創建和寫入許可權。發布Web 應用程序項目在「生成」菜單上,單擊「發布 項目名稱」選項。在「發布網站」對話框中,單擊省略號按鈕 (…) 瀏覽至要發布 Web 應用程序項目的位置。選擇「用本地副本替換匹配的文件」復選框或選擇「發布前刪除所有現有的文件」復選框。選擇希望如何將 Web 應用程序項目文件復制到新位置:是「僅限於運行該應用程序所需的文件」、「所有項目文件」,還是「源項目文件夾中的所有文件」。同時,通過選擇相關復選框可包括 App_Data 文件夾中的文件。單擊「確定」發布 Web 應用程序項目。完成發布時,在任務欄中即顯示「發布成功」。對位於目標位置的 Web 應用程序進行所需的任何配置更改。有關更多信息,請參見如何:配置已發布的網站。注意為了提高安全性,最好對特定配置設置進行加密。有關更多信息,請參見使用受保護的配置加密配置信息。請參見參考「發布 Web」對話框其他資源>Web Application Projects Overview
B. 應用程序已預編譯,因此不允許使用目錄「/App_WebReferences/」。
.asax
應用程序根目錄。
通常是 Global.asax 文件,該文件包含從 HttpApplication 類派生並表示該應用程序的代碼。
有關更多信息,請參見 Global.asax 語法。
.ascx
應用程序根目錄或子目錄。
Web 用戶控制項文件,該文件定義自定義、可重復使用的用戶控制項。
有關更多信息,請參見 ASP.NET 用戶控制項。
.ashx
應用程序根目錄或子目錄。
一般處理程序文件,該文件包含實現 IHttpHandler 介面以處理所有傳入請求的代碼。
有關更多信息,請參見 HTTP 處理程序介紹。
.asmx
應用程序根目錄或子目錄。
XML Web services 文件,該文件包含通過 SOAP 方式可用於其他 Web 應用程序的類和方法。
有關更多信息,請參見 XML Web 服務的發布和部署。
.aspx
應用程序根目錄或子目錄。
ASP.NET Web 窗體文件,該文件可包含 Web 控制項和其他業務邏輯。
有關更多信息,請參見 ASP.NET 網頁和 ASP.NET Web 伺服器控制項。
.axd
應用程序根目錄。
跟蹤查看器文件,通常是 Trace.axd。
有關更多信息,請參見 ASP.NET 跟蹤。
.browser
App_Browsers 子目錄。
瀏覽器定義文件,用於標識客戶端瀏覽器的啟用功能。
有關更多信息,請參見 ASP.NET Web 伺服器控制項和瀏覽器功能。
.cd
應用程序根目錄或子目錄。
類關系圖文件。
有關更多信息,請參見使用類關系圖。
.compile
Bin 子目錄。
預編譯的 stub(存根)文件,該文件指向相應的程序集。可執行文件類型(.aspx、ascx、.master、主題文件)已經過預編譯並放在 Bin 子目錄下。
有關更多信息,請參見 ASP.NET 網站預編譯概述。
.config
應用程序根目錄或子目錄。
通常是 Web.config 配置文件,該文件包含其設置配置各種 ASP.NET 功能的 XML 元素。
有關更多信息,請參見 ASP.NET 配置文件。
.cs、.jsl、.vb
App_Code 子目錄;但如果是 ASP.NET 頁的代碼隱藏文件,則與網頁位於同一目錄。
運行時要編譯的類源代碼文件。類可以是 HTTP 模塊、HTTP 處理程序,或者是 ASP.NET 頁 HTTP 處理程序介紹的代碼隱藏文件。
.csproj、.vbproj、vjsproj
Visual Studio 項目目錄。
Visual Studio 客戶端應用程序項目的項目文件。
有關更多信息,請參見項目和解決方案。
.disco、.vsdisco
App_WebReferences 子目錄。
XML Web services 發現文件,用於幫助定位可用的 Web services。
有關更多信息,請參見 XML Web 服務的發布和部署。
.dsdgm、.dsprototype
應用程序根目錄或子目錄。
分布式服務關系圖 (DSD) 文件,該文件可以添加到任何提供或使用 Web services 的 Visual Studio 解決方案,以便對 Web service 交互的結構視圖進行反向工程處理。
有關更多信息,請參見 XML Web 服務的發布和部署。
.dll
Bin 子目錄。
已編譯的類庫文件。或者,可以將類的源代碼放在 App_Code 子目錄下。
有關更多信息,請參見 ASP.NET 網站中的共享代碼文件夾。
.licx、.webinfo
應用程序根目錄或子目錄。
許可證文件。控制項創作者可以通過授權方法來檢查用戶是否得到使用控制項的授權,從而幫助保護自己的知識產權。
有關更多信息,請參見如何:License 組件和控制項。
.master
應用程序根目錄或子目錄。
母版頁,它定義應用程序中引用母版頁的其他網頁的布局。
有關更多信息,請參見 ASP.NET 母版頁。
.mdb、.ldb
App_Data 子目錄。
Access 資料庫文件。
有關更多信息,請參見通過 ASP.NET 訪問數據。
.mdf
App_Data 子目錄。
SQL 資料庫文件。
有關更多信息,請參見通過 ASP.NET 訪問數據。
.msgx、.svc
應用程序根目錄或子目錄。
Indigo Messaging Framework (MFx) service 文件。
.rem
應用程序根目錄或子目錄。
遠程處理程序文件。
有關更多信息,請參見使用 SOAP 擴展修改 SOAP 消息。
.resources
App_GlobalResources 或 App_LocalResources 子目錄。
資源文件,該文件包含指向圖像、可本地化文本或其他數據的資源字元串。
有關更多信息,請參見應用程序中的資源或如何:為 ASP.NET 網站創建資源文件。
.resx
App_GlobalResources 或 App_LocalResources 子目錄。
資源文件,該文件包含指向圖像、可本地化文本或其他數據的資源字元串。
有關更多信息,請參見應用程序中的資源或如何:為 ASP.NET 網站創建資源文件。
.sdm、.sdmDocument
應用程序根目錄或子目錄。
系統定義模型 (SDM) 文件。
有關更多信息,請參見系統定義模型 (SDM) 概述。
.sitemap
應用程序根目錄。
站點地圖文件,該文件包含網站的結構。ASP.NET 中附帶了一個默認的站點地圖提供程序,它使用站點地圖文件可以很方便地在網頁上顯示導航控制項。
有關更多信息,請參見 ASP.NET 站點導航。
.skin
App_Themes 子目錄。
用於確定顯示格式的外觀文件。
有關更多信息,請參見 ASP.NET 主題和外觀。
.sln
Visual Web Developer 項目目錄。
Visual Web Developer 項目的解決方案文件。
有關更多信息,請參見項目和解決方案。
.soap
應用程序根目錄或子目錄。
SOAP 擴展文件。
有關更多信息,請參見使用 SOAP 擴展修改 SOAP 消息
C. 一個應用程序中所包含的文件有哪些他們之間各自的功能要詳細的,不要復制的。。。
先說個例子。比如你是一個學生管理軟體吧。這個軟體會包含很多功能。這些功能都是通過相互之間的調用實現的。你可以盡量把那些沒聯系的功能都用一個程序編寫成一個包。然後在編譯時要定義一個主類。只用編譯主類。然後用專用的編譯工具把你編好的程序和資料庫還有多媒體資料集成一個文件。什麼.apk還有.exe等等再者就是不一樣的語言所編譯後得到的文件擴展名不一樣。.exe是c語言或c++編寫的。當你點擊了.exe 文件之後他會自動調用文件夾裡面的其他東西。但是要注意的是你所點擊的那個.exe就是此程序運行時所執行的。因為同一個文件夾裡面會有好多的.exe文件。。。。
D. 應用程序是什麼意思
比較大的應用程序都由很多模塊組成,這些模塊分別完成相對獨立的功能,它們彼此協作來完成整個軟體系統的工作。可能存在一些模塊的功能較為通用,在構造其它軟體系統時仍會被使用。在構造軟體系統時,如果將所有模塊的源代碼都靜態編譯到整個應用程序 EXE 文件中,會產生一些問題:一個缺點是增加了應用程序的大小,它會佔用更多的磁碟空間,程序運行時也會消耗較大的內存空間,造成系統資源的浪費;另一個缺點是,在編寫大的 EXE 程序時,在每次修改重建時都必須調整編譯所有源代碼,增加了編譯過程的復雜性,也不利於階段性的單元測試。
Windows 系統平台上提供了一種完全不同的較有效的編程和運行環境,你可以將獨立的程序模塊創建為較小的 DLL (Dynamic Linkable Library) 文件,並可對它們單獨編譯和測試。在運行時,只有當 EXE 程序確實要調用這些 DLL 模塊的情況下,系統才會將它們裝載到內存空間中。這種方式不僅減少了 EXE 文件的大小和對內存空間的需求,而且使這些 DLL 模塊可以同時被多個應用程序使用。Windows 自己就將一些主要的系統功能以 DLL 模塊的形式實現。
一般來說,DLL 是一種磁碟文件,以.dll、.DRV、.FON、.SYS 和許多以 .EXE 為擴展名的系統文件都可以是 DLL。它由全局數據、服務函數和資源組成,在運行時被系統載入到調用進程的虛擬空間中,成為調用進程的一部分。如果與其它 DLL 之間沒有沖突,該文件通常映射到進程虛擬空間的同一地址上。DLL 模塊中包含各種導出函數,用於向外界提供服務。DLL 可以有自己的數據段,但沒有自己的堆棧,使用與調用它的應用程序相同的堆棧模式;一個 DLL 在內存中只有一個實例;DLL 實現了代碼封裝性;DLL 的編制與具體的編程語言及編譯器無關。
在 Win32 環境中,每個進程都復制了自己的讀/寫全局變數。如果想要與其它進程共享內存,必須使用內存映射文件或者聲明一個共享數據段。DLL 模塊需要的堆棧內存都是從運行進程的堆棧中分配出來的。Windows 在載入 DLL 模塊時將進程函數調用與 DLL 文件的導出函數相匹配。Windows 操作系統對 DLL 的操作僅僅是把 DLL 映射到需要它的進程的虛擬地址空間里去。DLL 函數中的代碼所創建的任何對象(包括變數)都歸調用它的線程或進程所有。
調用方式
1、靜態調用方式:由編譯系統完成對 DLL 的載入和應用程序結束時 DLL 卸載的編碼(如還有其它程序使用該 DLL,則 Windows 對 DLL 的應用記錄減1,直到所有相關程序都結束對該 DLL 的使用時才釋放它,簡單實用,但不夠靈活,只能滿足一般要求。
隱式的調用:需要把產生動態連接庫時產生的 .LIB 文件加入到應用程序的工程中,想使用 DLL 中的函數時,只須說明一下。隱式調用不需要調用 LoadLibrary() 和 FreeLibrary()。程序員在建立一個 DLL 文件時,鏈接程序會自動生成一個與之對應的 LIB 導入文件。該文件包含了每一個 DLL 導出函數的符號名和可選的標識號,但是並不含有實際的代碼。LIB 文件作為 DLL 的替代文件被編譯到應用程序項目中。
當程序員通過靜態鏈接方式編譯生成應用程序時,應用程序中的調用函數與 LIB 文件中導出符號相匹配,這些符號或標識號進入到生成的 EXE 文件中。LIB 文件中也包含了對應的 DL L文件名(但不是完全的路徑名),鏈接程序將其存儲在 EXE 文件內部。
當應用程序運行過程中需要載入 DLL 文件時,Windows 根據這些信息發現並載入 DLL,然後通過符號名或標識號實現對 DLL 函數的動態鏈接。所有被應用程序調用的 DLL 文件都會在應用程序 EXE 文件載入時被載入在到內存中。可執行程序鏈接到一個包含 DLL 輸出函數信息的輸入庫文件(.LIB文件)。操作系統在載入使用可執行程序時載入 DLL。可執行程序直接通過函數名調用 DLL 的輸出函數,調用方法和程序內部其 它的函數是一樣的。
2、動態調用方式:是由編程者用 API 函數載入和卸載 DLL 來達到調用 DLL 的目的,使用上較復雜,但能更加有效地使用內存,是編制大型應用程序時的重要方式。
顯式的調用:是指在應用程序中用 LoadLibrary 或 MFC 提供的 AfxLoadLibrary 顯式的將自己所做的動態連接庫調進來,動態連接庫的文件名即是上面兩個函數的參數,再用 GetProcAddress() 獲取想要引入的函數。自此,你就可以象使用如同本應用程序自定義的函數一樣來調用此引入函數了。在應用程序退出之前,應該用 FreeLibrary 或 MFC 提供的 AfxFreeLibrary 釋放動態連接庫。直接調用 Win32 的 LoadLibary 函數,並指定 DLL 的路徑作為參數。LoadLibary 返回 HINSTANCE 參數,應用程序在調用 GetProcAddress 函數時使用這一參數。GetProcAddress 函數將符號名或標識號轉換為 DLL 內部的地址。程序員可以決定 DLL 文件何時載入或不載入,顯式鏈接在運行時決定載入哪個 DLL 文件。使用 DLL 的程序在使用之前必須載入(LoadLibrary)載入DLL從而得到一個DLL模塊的句柄,然後調用 GetProcAddress 函數得到輸出函數的指針,在退出之前必須卸載DLL(FreeLibrary)。
Windows將遵循下面的搜索順序來定位 DLL:
包含EXE文件的目錄
進程的當前工作目錄
Windows系統目錄
Windows目錄
列在 Path 環境變數中的一系列目錄
MFC中的DLL
Non-MFC DLL:指的是不用 MFC 的類庫結構,直接用 C 語言寫的 DLL,其輸出的函數一般用的是標准 C 介面,並能被 非 MFC 或 MFC 編寫的應用程序所調用。
Regular DLL:和下述的 Extension DLLs 一樣,是用 MFC 類庫編寫的。明顯的特點是在源文件里有一個繼承 CWinApp 的類。其又可細分成靜態連接到 MFC 和動態連接到 MFC 上的。
靜態連接到 MFC 的動態連接庫只被 VC 的專業 版和企業版所支持。該類 DLL 應用程序里頭的輸出函數可以被任意 Win32 程序使用,包括使用 MFC 的應用程序。輸入函數有如下形式:
extern "C" EXPORT YourExportedFunction();
如果沒有 extern "C" 修飾,輸出函數僅僅能從 C++ 代碼中調用。
DLL 應用程序從 CWinApp 派生,但沒有消息循環。
動態鏈接到 MFC 的 規則 DLL 應用程序里頭的輸出函數可以被任意 Win32 程序使用,包括使用 MFC 的應用程序。但是,所有從 DLL 輸出的函數應該以如下語句開始:
AFX_MANAGE_STATE(AfxGetStaticMoleState( ))
此語句用來正確地切換 MFC 模塊狀態。
Regular DLL能夠被所有支持 DLL 技術的語言所編寫的應用程序所調用。在這種動態連接庫中,它必須有一個從 CWinApp 繼承下來的類,DLLMain 函數被 MFC 所提供,不用自己顯式的寫出來。
Extension DLL:用來實現從 MFC 所繼承下來的類的重新利用,也就是說,用這種類型的動態連接庫,可以用來輸出一個從 MFC 所繼承下來的類。它輸出的函數僅可以被使用 MFC 且動態鏈接到 MFC 的應用程序使用。可以從 MFC 繼承你所想要的、更適於你自己用的類,並把它提供給你的應用程序。你也可隨意的給你的應用程序提供 MFC 或 MFC 繼承類的對象指針。Extension DLL使用 MFC 的動態連接版本所創建的,並且它只被用 MFC 類庫所編寫的應用程序所調用。Extension DLLs 和 Regular DLLs 不一樣,它沒有從 CWinApp 繼承而來的類的對象,所以,你必須為自己 DLLMain 函數添加初始化代碼和結束代碼。
和規則 DLL 相比,有以下不同:
1、它沒有從 CWinApp 派生的對象;
2、它必須有一個 DLLMain 函數;
3、DLLMain 調用 AfxInitExtensionMole 函數,必須檢查該函數的返回值,如果返回0,DLLMmain 也返回 0;
4、如果它希望輸出 CRuntimeClass 類型的對象或者資源,則需要提供一個初始化函數來創建一個 CDynLinkLibrary 對象。並且,有必要把初始化函數輸出;
5、使用擴展 DLL 的 MFC 應用程序必須有一個從 CWinApp 派生的類,而且,一般在InitInstance 里調用擴展 DLL 的初始化函數。
DLL入口函數
1、每一個 DLL 必須有一個入口點,DLLMain 是一個預設的入口函數。DLLMain 負責初始化和結束工作,每當一個新的進程或者該進程的新的線程訪問 DLL 時,或者訪問 DLL 的每一個進程或者線程不再使用DLL或者結束時,都會調用 DLLMain。但是,使用 TerminateProcess 或 TerminateThread 結束進程或者線程,不會調用 DLLMain。
DLLMain的函數原型:
BOOL APIENTRY DLLMain(HANDLE hMole,DWORD ul_reason_for_call,LPVOID
lpReserved)
{
switch(ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
.......
case DLL_THREAD_ATTACH:
.......
case DLL_THREAD_DETACH:
.......
case DLL_PROCESS_DETACH:
.......
return TRUE;
}
}
參數:
hMoudle:是動態庫被調用時所傳遞來的一個指向自己的句柄(實際上,它是指向_DGROUP段的一個選擇符);
ul_reason_for_call:是一個說明動態庫被調原因的標志。當進程或線程裝入或卸載動態連接庫的時候,操作系統調用入口函數,並說明動態連接庫被調用的原因。它所有的可能值為:
DLL_PROCESS_ATTACH: 進程被調用;
DLL_THREAD_ATTACH: 線程被調用;
DLL_PROCESS_DETACH: 進程被停止;
DLL_THREAD_DETACH: 線程被停止;
lpReserved:是一個被系統所保留的參數;
2、_DLLMainCRTStartup
為了使用 "C" 運行庫 (CRT,C Run time Library) 的 DLL 版本(多線程),一個 DLL 應用程序必須指定 _DLLMainCRTStartup 為入口函數,DLL 的初始化函數必須是 DLLMain。
_DLLMainCRTStartup 完成以下任務:當進程或線程捆綁(Attach) 到 DLL 時為 "C" 運行時的數據 (C Runtime Data) 分配空間和初始化並且構造全局 "C++"對象,當進程或者線程終止使用DLL(Detach) 時,清理 C Runtime Data 並且銷毀全局 "C++" 對象。它還調用 DLLMain 和 RawDLLMain 函數。
RawDLLMain 在 DLL 應用程序動態鏈接到 MFC DLL 時被需要,但它是靜態鏈接到 DLL 應用程序的。在講述狀態管理時解釋其原因。
關於調用約定
動態庫輸出函數的約定有兩種:調用約定和名字修飾約定。
1)調用約定(Calling convention):決定函數參數傳送時入棧和出棧的順序,由調用者還是被調用者把參數彈出棧,以及編譯器用來識別函數名字的修飾約定。
函數調用約定有多種,這里簡單說一下:
1、__stdcall 調用約定相當於16位動態庫中經常使用的 PASCAL 調用約定。在32位的 VC++5.0 中PASCAL 調用約定不再被支持(實際上它已被定義為__stdcall。除了__pascal 外,__fortran 和__syscall也不被支持),取而代之的是 __stdcall 調用約定。兩者實質上是一致的,即函數的參數自右向左通過棧傳遞,被調用的函數在返回前清理傳送參數的內存棧,但不同的是函數名的修飾部分(關於函數名的修飾部分在後面將詳細說明)。
_stdcall 是 Pascal 程序的預設調用方式,通常用於 Win32 API 中,函數採用從右到左的壓棧方式,自己在退出時清空堆棧。VC 將函數編譯後會在函數名前面加上下劃線前綴,在函數名後加上 "@" 和參數的位元組數。
2、C 調用約定(即用__cdecl 關鍵字說明)按從右至左的順序壓參數入棧,由調用者把參數彈出棧。對於傳送參數的內存棧是由調用者來維護的(正因為如此,實現可變參數的函數只能使用該調用約定)。另外,在函數名修飾約定方面也有所不同。
_cdecl 是 C 和 C++ 程序預設的調用方式。每一個調用它的函數都包含清空堆棧的代碼,所以產生的可執行文件大小會比調用 _stdcall 函數的大。函數採用從右到左的壓棧方式。VC 將函數編譯後會在函數名前面加上下劃線前綴。 它是 MFC 預設調用約定。
3、__fastcall 調用約定是 "人" 如其名,它的主要特點就是快,因為它是通過寄存器來傳送參數的(實際上,它用 ECX 和 EDX 傳送前兩個雙字(DWORD)或更小的參數,剩下的參數仍舊自右向左壓棧傳送,被調用的函數在返回前清理傳送參數的內存棧),在函數名修飾約定方面,它和前兩者均不同。
_fastcall方式的函數採用寄存器傳遞參數,VC 將函數編譯後會在函數名前面加上"@"前綴,在函數名後加上"@"和參數的位元組數。
4、thiscall 僅僅應用於 "C++" 成員函數。this 指針存放於 CX 寄存器,參數從右到左壓。thiscall 不是關鍵詞,因此不能被程序員指定。
5、naked call採用 1-4 的調用約定時,如果必要的話,進入函數時編譯器會產生代碼來保存ESI,EDI,EBX,EBP寄存器,退出函數時則產生代碼恢復這些寄存器的內容。
naked call不產生這樣的代碼。naked call不是類型修飾符,故必須和_declspec 共同使用。
關鍵字 __stdcall、__cdecl 和 __fastcall 可以直接加在要輸出的函數前,也可以在編譯環境的 Setting...\C/C++ \Code Generation 項選擇。當加在輸出函數前的關鍵字與編譯環境中的選擇不同時,直接加在輸出函數前的關鍵字有效。它們對應的命令行參數分別為/Gz、/Gd 和 /Gr。預設狀態為/Gd,即__cdecl。
要完全模仿 PASCAL 調用約定首先必須使用 __stdcall 調用約定,至於函數名修飾約定,可以通過其它方法模仿。還有一個值得一提的是 WINAPI 宏,Windows.h 支持該宏,它可以將出函數翻譯成適當的調用約定,在 WIN32 中,它被定義為 __stdcall。使用 WINAPI 宏可以創建自己的 APIs。
2)名字修飾約定
1、修飾名(Decoration name)
"C" 或者 "C++" 函數在內部(編譯和鏈接)通過修飾名識別。修飾名是編譯器在編譯函數定義或者原型時生成的字元串。有些情況下使用函數的修飾名是必要的,如在模塊定義文件里頭指定輸出"C++"重載函數、構造函數、析構函數,又如在匯編代碼里調用"C""或"C++"函數等。
修飾名由函數名、類名、調用約定、返回類型、參數等共同決定。
2、名字修飾約定隨調用約定和編譯種類(C或C++)的不同而變化。函數名修飾約定隨編譯種類和調用約定的不同而不同,下面分別說明。
a、C編譯時函數名修飾約定規則:
__stdcall 調用約定在輸出函數名前加上一個下劃線前綴,後面加上一個"@"符號和其參數的位元組數,格式為 _functionname@number。
__cdecl調用約定僅在輸出函數名前加上一個下劃線前綴,格式為 _functionname。
__fastcall調用約定在輸出函數名前加上一個"@"符號,後面也是一個"@"符號和其參數的位元組數,格式為@functionname@number。
它們均不改變輸出函數名中的字元大小寫,這和PASCAL調用約定不同,PASCAL約定輸出的函數名無任何修飾且全部大寫。
b、C++編譯時函數名修飾約定規則:
__stdcall調用約定:
1、以"?"標識函數名的開始,後跟函數名;
2、函數名後面以"@@YG"標識參數表的開始,後跟參數表;
3、參數表以代號表示:
X——void,
D——char,
E——unsigned char,
F——short,
H——int,
I——unsigned int,
J——long,
K——unsigned long,
M——float,
N——double,
_N——bool,
....
PA——表示指針,後面的代號表明指針類型,如果相同類型的指針連續出現,以"0"代替,一個"0"代表一次重復;
4、參數表的第一項為該函數的返回值類型,其後依次為參數的數據類型,指針標識在其所指數據類型前;
5、參數表後以"@Z"標識整個名字的結束,如果該函數無參數,則以"Z"標識結束。
其格式為"?functionname@@YG*****@Z"或"?functionname@@YG*XZ",
例如
int Test1(char *var1,unsigned long)-----「?Test1@@YGHPADK@Z」
void Test2() -----「?Test2@@YGXXZ」
__cdecl調用約定:
規則同上面的_stdcall調用約定,只是參數表的開始標識由上面的"@@YG"變為"@@YA"。
__fastcall調用約定:
規則同上面的_stdcall調用約定,只是參數表的開始標識由上面的"@@YG"變為"@@YI"。
VC++對函數的省缺聲明是"__cedcl",將只能被C/C++調用。
關於DLL的函數
動態鏈接庫中定義有兩種函數:導出函數(export function)和內部函數(internal function)。導出函數可以被其它模塊調用,內部函數在定義它們的DLL程序內部使用。
輸出函數的方法有以下幾種:
1、傳統的方法
在模塊定義文件的 EXPORT 部分指定要輸入的函數或者變數。語法格式如下:
entryname[=internalname] [@ordinal[NONAME]] [DATA] [PRIVATE]
其中:
entryname 是輸出的函數或者數據被引用的名稱;
internalname 同 entryname;
@ordinal 表示在輸出表中的順序號(index);
NONAME 僅僅在按順序號輸出時被使用(不使用 entryname );
DATA 表示輸出的是數據項,使用 DLL 輸出數據的程序必須聲明該數據項為 _declspec(DLLimport)。
上述各項中,只有 entryname 項是必須的,其他可以省略。
對於"C"函數來說,entryname 可以等同於函數名;但是對 "C++" 函數(成員函數、非成員函數)來說,entryname 是修飾名。可以從 .map 映像文件中得到要輸出函數的修飾名,或者使用DUMPBIN /SYMBOLS 得到,然後把它們寫在 .def 文件的輸出模塊。DUMPBIN 是VC提供的一個工具。
如果要輸出一個 "C++" 類,則把要輸出的數據和成員的修飾名都寫入 .def 模塊定義文件。
2、在命令行輸出
對鏈接程序 LINK 指定 /EXPORT 命令行參數,輸出有關函數。
3、使用 MFC 提供的修飾符號 _declspec(DLLexport)
在要輸出的函數、類、數據的聲明前加上 _declspec(DLLexport) 修飾符表示輸出。__declspec(DLLexport) 在 C 調用約定、C 編譯情況下可以去掉輸出函數名的下劃線前綴。extern "C" 使得在 C++ 中使用 C 編譯方式成為可能。在"C++"下定義"C"函數需要加 extern "C" 關鍵詞。用 extern "C" 來指明該函數使用 C 編譯方式。輸出的 "C" 函數可以從 "C" 代碼里調用。
例如,在一個 C++ 文件中,有如下函數:
extern "C" {void __declspec(DLLexport) __cdecl Test(int var);}
其輸出函數名為:Test
MFC提供了一些宏,就有這樣的作用。
AFX_CLASS_IMPORT:__declspec(DLLexport)
AFX_API_IMPORT:__declspec(DLLexport)
AFX_DATA_IMPORT:__declspec(DLLexport)
AFX_CLASS_EXPORT:__declspec(DLLexport)
AFX_API_EXPORT:__declspec(DLLexport)
AFX_DATA_EXPORT:__declspec(DLLexport)
AFX_EXT_CLASS: #ifdef _AFXEXT
AFX_CLASS_EXPORT
#else
AFX_CLASS_IMPORT
AFX_EXT_API:#ifdef _AFXEXT
AFX_API_EXPORT
#else
AFX_API_IMPORT
AFX_EXT_DATA:#ifdef _AFXEXT
AFX_DATA_EXPORT
#else
AFX_DATA_IMPORT
像 AFX_EXT_CLASS 這樣的宏,如果用於 DLL 應用程序的實現中,則表示輸出(因為_AFX_EXT被定義,通常是在編譯器的標識參數中指定該選項 /D_AFX_EXT);如果用於使用DLL的應用程序中,則表示輸入(_AFX_EXT沒有定義)。
要輸出整個的類,對類使用_declspec(_DLLexpot);要輸出類的成員函數,則對該函數使用_declspec(_DLLexport)。如:
class AFX_EXT_CLASS CTextDoc : public CDocument
{
…
}
extern "C" AFX_EXT_API void WINAPI InitMYDLL();
這幾種方法中,最好採用第三種,方便好用;其次是第一種,如果按順序號輸出,調用效率會高些;最次是第二種。
模塊定義文件(.DEF)
模塊定義文件(.DEF)是一個或多個用於描述 DLL 屬性的模塊語句組成的文本文件,每個DEF文件至少必須包含以下模塊定義語句:
第一個語句必須是LIBRARY語句,指出DLL的名字;
EXPORTS 語句列出被導出函數的名字;將要輸出的函數修飾名羅列在 EXPORTS 之下,這個名字必須與定義函數的名字完全一致,如此就得到一個沒有任何修飾的函數名了。
可以使用DESCRIPTION語句描述DLL的用途(此句可選);
";"對一行進行注釋(可選)。 DLL程序和調用其輸出函數的程序的關系
1、DLL與進程、線程之間的關系
DLL模塊被映射到調用它的進程的虛擬地址空間。
DLL使用的內存從調用進程的虛擬地址空間分配,只能被該進程的線程所訪問。
DLL的句柄可以被調用進程使用;調用進程的句柄可以被DLL使用。
DLL使用調用進程的棧。
2、關於共享數據段
DLL定義的全局變數可以被調用進程訪問;DLL可以訪問調用進程的全局數據。使用同一DLL的每一個進程都有自己的DLL全局變數實例。如果多個線程並發訪問同一變數,則需要使用同步機制;對一個DLL的變數,如果希望每個使用DLL的線程都有自己的值,則應該使用線程局部存儲(TLS,Thread Local Strorage)。
在程序里加入預編譯指令,或在開發環境的項目設置里也可以達到設置數據段屬性的目的.必須給這些變數賦初值,否則編譯器會把沒有賦初始值的變數放在一個叫未被初始化的數據段中。
E. 如何將應用程序注冊為系統服務
安裝組件在正在安裝到的系統上注冊一項單個的服務,並使服務控制管理器知道該服務的存在。當使用服務應用程序時,可以在「屬性」窗口選擇一個鏈接,以自動將適當的安裝程序添加到項目中。有關安裝組件以及組件的工作方式的信息,請參見安裝組件介紹。注意服務的屬性值將從服務類復制到安裝程序類。如果更新服務類上的屬性值,這些屬性值在安裝程序中將不會自動更新。當向項目添加安裝程序時,項目中會創建一個新類(默認情況下名為ProjectInstaller),並在其中創建適當的安裝組件的實例。該類作為項目所需的所有安裝組件的中心點。例如,如果向應用程序添加第二項服務並單擊「添加安裝程序」鏈接,這時並不創建第二個安裝程序類,而是將第二項服務所需的其他安裝組件添加到現有類。要正確安裝服務,並不需要在安裝程序中進行任何特殊編碼。但是,如果需要向安裝進程添加特殊功能,則可能偶爾需要修改安裝程序的內容。有關信息,請參見如何:配置安裝組件。在將安裝程序添加到應用程序之後,下一步是創建安裝項目,該項目將安裝已編譯的項目文件並運行安裝服務所需的安裝程序。若要創建完整的安裝項目,您必須將服務項目的輸出添加到該安裝項目,然後添加自定義操作以安裝您的服務。有關安裝項目的信息,請參見安裝項目。有關自定義操作的信息,請參見演練:創建自定義操作。注意顯示的對話框和菜單命令可能會與幫助中的描述不同,具體取決於您現用的設置或版本。若要更改設置,請在「工具」菜單上選擇「導入和導出設置」。有關信息,請參見VisualStudio設置。將安裝程序添加到服務應用程序在「解決方案資源管理器」中,訪問要為其添加安裝組件的服務的「設計」視圖。單擊設計器的背景以選擇服務本身,而不是它的任何內容。設計器具有焦點時,右擊然後單擊「添加安裝程序」。這時項目中就添加了一個新類ProjectInstaller和兩個安裝組件ServiceProcessInstaller和ServiceInstaller,並且服務的屬性值被復制到組件。單擊ServiceInstaller組件,驗證ServiceName屬性的值已為與服務本身的ServiceName屬性的值相同。若要確定如何啟動服務,請單擊ServiceInstaller組件並將StartType屬性設置為適當的值。值結果Manual服務安裝後,必須手動啟動。有關信息,請參見如何:啟動服務。Automatic每次計算機重新啟動時,服務都會自動啟動。Disabled服務無法啟動。若要確定將要運行服務的安全上下文,請單擊ServiceProcessInstaller組件並設置適當的屬性值。有關信息,請參見如何:為服務指定安全上下文。重寫需要為其執行自定義處理的所有方法。有關信息,請參見如何:重寫安裝組件上的默認方法。對項目中的每項附加服務執行步驟1到步驟7。注意對於項目中的每項附加服務,必須將附加的ServiceInstaller組件添加到項目的ProjectInstaller類中。步驟三中添加的ServiceProcessInstaller組件適用於項目中的所有單個服務安裝程序。創建您的安裝項目和自定義操作,部署和安裝您的服務。有關安裝項目的信息,請參見安裝項目。有關自定義操作的信息,請參見演練:創建自定義操作。
F. 每個java應用程序要有且只有一個什麼方法,它是程序運行的開始點
1. 一個Java應用程序必須且只有一個類含有 main_____ 方法。
2. 構造方法 是一種特殊方法,它的名字必須與它所在的類的名字完全相同,並不返回任何數據類型。
3. 子類自然地繼承了其父類中不是 private 的成員變數作為自己的成員變數。
4. 在Java語言中多態性體現在由方法重載實現的靜態多態性和 方法重定義 實現的動態多態性。
5. final 類不能被繼承,即不能有子類。
6. 局部變數的名字與成員變數的名字相同,若想在該方法內使用成員變數,必須使用關鍵字 this。
7. 可以使用String類的 endsWith 方法判斷一個字元串的後綴是否是字元串s。
8. 對於一個已經不被任何引用變數引用的對象,當垃圾回收器准備回收該對象所佔用的內存時,將自動調用該對象的 finalize() 方法。
9. throws 方法是一種非常有用的輔助性程序設計方法。採用這種方法可以使得在程序設計時將程序的正常流程與錯誤處理分開,有利於代碼的編寫和維護。
10.read 方法從輸入流中順序讀取源中的單個位元組數據,該方法返回位元組值(0~255 之間的一個整數),如果到達源的末尾,該方法返回 -1 。
11. 是一種由多個節點組成的數據結構,並且每個節點包含有數據以及指向下一個節點的引用。
12.在集合框架中, 數組 的特點是長度固定,可以用下標索引,並且所有的元素的類型都是一致的;
map 的訪問時間接近穩定,它是一種鍵值對映射的數據結構。
13.典型的JDBC程序按 DBECFA 順序編寫。
A.釋放資源
B.獲得與資料庫的連接
C.執行SQL命令
D.注冊JDBC Driver
E.創建不同類型的Statement
F.如果有結果集,處理結果集
14.在操作系統把程序所寫到輸出流上的那些位元組保存到磁碟上之前,內容有時被存放在內存緩沖區中,
通過調用 close 方法,可以保證操作系統把流緩沖區的內容寫到它的目的地。
15.從ResultSet結果集中取數據之前必須調用它的 方法,否則會有異常發生。
16.如果在子類中想使用被子類隱藏的父類的成員變數或方法可以使用關鍵字 。
17.面向對象編程序主要有 封裝 、繼承性、 多態性 的特點。
18.在循環體中,如果想結束本次循環可以用 break 語句。
G. 怎樣解決因為應用程序的並行配置不正確的問題
1、右擊我的電腦,打開【管理】。
H. java 初學java 問個很傻的問題 java除了可以寫在記事本之外,有沒有類似visl studio的那種軟體
你說的東東,咱們專業點叫「集成開發工具」,也就是IDE。下面就是常見的14種JAVA開發工具。
常見的十四種Java開發工具的特點
1、JDK(JavaDevelopmentKit)Java開發工具集
從初學者角度來看,採用JDK開發Java程序能夠很快理解程序中各部分代碼之間的關系,有利於理解Java面向對象的設計思想。JDK的另一個顯著特點是隨著Java(J2EE、J2SE以及J2ME)版本的升級而升級。但它的缺點也是非常明顯的就是從事大規模企業級Java應用開發非常困難,不能進行復雜的Java軟體開發,也不利於團體協同開發。
2、JavaWorkshop
3、NetBeans與SunJavaStudio5
NetBeans是開放源碼的Java集成開發環境(IDE),適用於各種客戶機和Web應用。
SunJavaStudio是Sun公司最新發布的商用全功能JavaIDE,支持Solaris、Linux和Windows平台,適於創建和部署2層JavaWeb應用和n層J2EE應用的企業開發人員使用。NetBeans是業界第一款支持創新型Java開發的開放源碼IDE。開發人員可以利用業界強大的開發工具來構建桌面、Web或移動應用。同時,通過NetBeans和開放的API的模塊化結構,第三方能夠非常輕松地擴展或集成NetBeans平台。NetBeans3.5.1主要針對一般Java軟體的開發者,而JavaOneStudio5則主要針對企業做網路服務等應用的開發者。Sun不久還將推出ProjectRave,其目標是幫助企業的開發者進行軟體開發。NetBeans3.5.1版本與其他開發工具相比,最大區別在於不僅能夠開發各種台式機上的應用,而且可以用來開發網路服務方面的應用,可以開發基於J2ME的移動設備上的應用等。在NetBeans3.5.1基礎上,Sun開發出了JavaOneStudio5,為用戶提供了一個更加先進的企業編程環境。在新的JavaOneStudio5里有一個應用框架,開發者可以利用這些模塊快速開發自己在網路服務方面的各種應用程序。
4、Borland的JBuilder
Jbuilder進入了Java集成開發環境的王國,它滿足很多方面的應用,尤其是對於伺服器方以及EJB開發者們來說。下面簡單介紹一下Jbuilder的特點:
1)Jbuilder支持最新的Java技術,包括Applets、JSP/Servlets、JavaBean以及EJB(EnterpriseJavaBeans)的應用。
2)用戶可以自動地生成基於後端資料庫表的EJBJava類,Jbuilder同時還簡化了EJB的自動部署功能.此外它還支持CORBA,相應的向導程序有助於用戶全面地管理IDL(分布應用程序所必需的介面定義語言InterfaceDefinitionLanguage)和控制遠程對象。
3)Jbuilder支持各種應用伺服器。Jbuilder與InpriseApplicationServer緊密集成,同時支持WebLogicServer,支持EJB1.1和EJB2.0,可以快速開發J2EE的電子商務應用。
4)Jbuilder能用Servlet和JSP開發和調試動態Web應用。
5)利用Jbuilder可創建(沒有專有代碼和標記)純Java2應用。由於Jbuilder是用純Java語言編寫的,其代碼不含任何專屬代碼和標記,它支持最新的Java標准。
6)Jbuilder擁有專業化的圖形調試介面,支持遠程調試和多線程調試,調試器支持各種JDK版本,包括J2ME/J2SE/J2EE。JBuilder環境開發程序方便,它是純的Java開發環境,適合企業的J2EE開發;缺點是往往一開始人們難於把握整個程序各部分之間的關系,對機器的硬體要求較高,比較吃內存,這時運行速度顯得較慢。
5、Oracle的JDeveloper
Oracle9iJDeveloper(定為9.0版,最新為10g)為構建具有J2EE功能,XML和Webservices的復雜的,多層的Java應用程序提供了一個完全集成的開發環境。它為運用Oracle9i資料庫和應用伺服器的開發人員提供特殊的功能和增強性能,除此以外,它也有資格成為用於多種用途Java開發的一個強大的工具。
Oracle9iJDeveloper的主要特點如下:
①具有UML(UnifiedModelingLanguage,一體化建模語言)建模功能。可以將業務對象及e-business應用模型化。
②配備有高速Java調試器(Debuger)、內置Profiling工具、提高代碼質量的工具「CodeCoach」等。
③支持SOAP(SimpleObjectAccessProtocol)「簡單對象訪問協議」、UDDI(UniversalDescription,DiscoveryandIntegration)「統一描述、發現和集成協議」
、WSDL()「WEB服務描述語言」等Web服務標准。JDeveloper不僅僅是很好的Java編程工具,而且是OracleWeb服務的延伸,支持ApacheSOAP,以及9iAS,可擴充的環境和XML和WSDL語言緊密相關。Oracle9iJdeveloper完全利用Java編寫,能夠與以前的Oracle伺服器軟體以及其他廠商支持J2EE的應用伺服器產品相兼容,而且在設計時著重針對Oracle9i,能夠無縫化跨平台之間的應用開發,提供了業界第一個完整的、集成了J2EE和XML的開發環境,允許開發者快速開發可以通過Web、無線設備及語音界面訪問的Web服務和交易應用,以往只能通過將傳統Java編程技巧與最新模塊化方式結合到一個單一集成的開發環境中之後才能完成J2EE應用開發生命周期管理的事實,從根本上得到改變。缺點就是對於初學者來說,較復雜,也比較難。
6、IBM的VisualAgeforJava
VisualAgeforJava是一個非常成熟的開發工具,它的特性以於IT開發者和業余的Java編程人員來說都是非常用有用的。它提供對可視化編程的廣泛支持,支持利用CICS連接遺傳大型機應用,支持EJB的開發應用,支持與Websphere的集成開發,方便的bean創建和良好的快速應用開發(RAD)支持和無文件式的文件處理。
IBM為建設Web站點所推出的及其包含的Visual
AgeforJavaProfessionalEdition軟體已全面轉向以Java為中心,這樣,Java開發人員對WebSphere全套工具的感覺或許會好了許多。Studio所提供的工具有:Web站點管理、快速開發JDBC頁向導程序、HTML編輯器和HTML語法檢查等。這確實是個不錯的HTML站點頁面編輯環境。Studio和VisualAge集成度很高,菜單中提供了在兩種軟體包之間快速移動代碼的選項。這就讓使用Studio的Web頁面設計人員和使用VisualAge的Java程序員
可以相互交換文件、協同工作。VisualAgeforJava支持團隊開發,內置的代碼庫可以自動地根據用戶做出改動而修改程序代碼,這樣就可以很方便地將目前代碼和早期版本做出比較。與VisualAge緊密結合的WebsphereStudio本身並不提供源代碼和版本管理的支持,它只是包含了一個內置文件鎖定系統,當編輯項目的時候可以防止其他人對這些文件的錯誤修改,軟體還支持諸如MicrosoftVisualSourceSafe這樣的第三方源代碼控制系統。VisualAgeforJava完全面向對象的程序設計思想使得開發程序非常快速、高效。你可以不編寫任何代碼就可以設計出一個典型的應用程序框架。VisualAgeforJava作為IBM電子商務解決方案其中產品之一,可以無縫地與其他IBM產品,如WebSphere、DB2融合,迅速完成從設計、開發到部署應用的整個過程。VisualAgeforJava獨特的管理文件方式使其集成外部工具非常困難,你無法讓VisualAgeforJava與其他工具一起聯合開發應用。
7、BEA的WebLogicWorkshop
BEAWebLogicWorkshop是一個統一、簡化、可擴展的開發環境,使所有的開發人員都能在BEAWebLogicEnterprisePlatform之上構建基於標準的企業級應用,從而提高了開發部門的生產力水平,加快了價值的實現。WebLogicWorkshop除了提供便捷的Web服務之外,它能夠用於創建更多種類的應用。作為整個BEAWebLogicPlatform的開發環境。不管是創建門戶應用、編寫工作流、還是創建Web應用,Workshop8.1都可以幫助開發人員更快更好地完成。WebLogicWorkshop的主要特點如下:
①使J2EE開發切實可行,提高開發效率
BEAWebLogicWorkshop使開發人員遠離J2EE內在的復雜性,集中精力專注業務邏輯,無須操心單調乏味的基礎結構代碼。這種創新意味著,已被企業驗證的J2EE的強大功能,最終被大多數不熟悉Java和J2EE的應用開發人員所掌握,從而使IT部門的工作效率提高一個數量級。可視化設計器以及直觀的概念,如事件、屬性和控制項等,實現了基於事件的開發。Workshop簡化的程序設計模型,使開發人員不必掌握復雜的J2EEAPI和面向對象的程序設計原理。所有開發人員,包括J2EE專家和具有可視化和過程化語言技能的應用開發人員在內,都可以共同工作在BEAWebLogicEnterprisePlatform之上。Workshop的可視化開發環境,創建帶有代碼注釋的標准Java文件,用來說明由運行時框架實施的企業級需求。J2EE和其他高級開發人員,藉助功能強大的代碼編輯功能,可以訪問Java源代碼,從而彌補了可視化設計器的不足。
②構建企業級應用
通過在可伸縮、安全可靠的企業級架構上實施各種應用,BEAWebLogicWorkshop大大降低了開發風險。而且,所有應用的創建都使用標準的J2EE組件,既保護了您的技術投資,又保持了最大的靈活性。BEAWebLogicWorkshop運行框架,是統一整個架構的匯聚層,使單一、簡化的程序設計模型擴展到所有的BEAWebLogicEnterprisePlatform應用類型。通過解釋設計時創建的注釋代碼,運行時框架可以實現必要的J2EE組件,並且提取出與J2EE應用開發有關的所有底層細節。
③降低IT復雜性BEAWebLogicWorkshop提供各種Java控制項,使得與IT資源的連接更輕而易舉。另外,在構建任何BEAWebLogicPlatform的應用中,Java控制項不僅可擴展而且完全相同。這種強大、有效的方法能夠:降低IT技術的復雜性,優化信息的可用性,推動包含"最佳業務方案"的可重用服務的開發,使開發人員能以更低的成本、更短的時間實現更大的產出。
利用BEAWebLogicWorkshop,任何開發人員都能以最大的生產效率,構建各種Web服務、Web應用、門戶和集成項目。BEAWebLogicWorkshop是BEA的產品戰略核心,它幫助客戶接觸和利用面向服務架構(SOA)的強大功能。BEAWeblogicWorkshop8.1極大簡化了當前實際企業集成環境中企業級應用和服務的構建,並成為全面支持關鍵企業級應用(如非同步、真正松耦合和粗粒度消息傳送等)的自然選擇。它的缺點就是過於復雜,對於初學者來說,理解起來較為困難。
8、WebGain的VisualCafeforJavaVisualCafe是只能在Symantec公司的Java虛擬機、Netscape公司的Java虛擬機和Microsoft虛擬機上工作的調試器。這對於開發者來講是一個重要的特性,因為用戶開發的Java代碼中的許多軟體bug就可能中會在某種特定的虛擬機上起作用。在修改後進行編譯基繼續進行調試時,VisualCafe會自動將文件存檔,使用VisualCafe創建的原生應用具有許多特點。除了明顯的速度提高之外,Symantec使類庫的二進制方式比正常的JDK小VisualCafe為所指定的關系自動生成或更新必要的Java代碼。利用VisualCafe,用戶可以從一個標准對象資料庫中集合完整的Java應用程序和Applet,而不必再編寫源代碼。VisualCafe還提供了一個擴充的源代碼開發工具集。VisualCafe綜合了Java軟體的可視化源程序開發工具,它允許開發人員在可視化視圖和源視圖之間進行有效地轉換。在可視化視圖中進行的修改立即反映在源代碼中。對源代碼的改變自動更新可視化視圖。VisualCafe具有許多源文件方面的特性,如全局檢索和替換。絕大多數Java開發工具的文獻的問題在於簡單地挨個介紹開發工具的每部分組件,但用戶在開應用時還需要一個面向任務的手冊,利用這個手冊你可以不必知道工具每一部分的特定功能就可以開始創建自己的應用。VisualCafe提供了非常全面的用戶指南,它對最開始的安裝到創建第一個Java應用和Applet都提供了全面的幫助,VisualCafe將自動生成所指明關系的必要Java代碼。VisualCafe可以在Windows95和WindowsNT平台下運行,Symantec公司為Java開發工作提供一個在Macintosh操作系統下可以運行的RAD工具。VisualCafe編譯器速度很快,在國際化支持方面比較突出;缺點就是對於初學者來說,較復雜,也比較難。
9、Macromedia的JRUN
Macromedia公司的JRun是一個具有最廣闊適用性的Java引擎,用於開發及實施由JavaServlets和JavaServerPages編寫的伺服器端Java應用。JRun是第一個完全支持JSP1.0規格書的商業化產品,全球有超過80,000名開發人員使用JRun在他們已有的Web伺服器上添加伺服器端Java的功能。其中Web伺服器包括了MicrosoftIIS,NetscapeEnterpriseServer,Apache等。JRun是開發實施伺服器端Java的先進引擎。如果我們希望在我們的Web應用中添加伺服器端Java功能,那麼JRun將成為我們的正確選擇。JRun目前有3個版本,它是第一個支持JavaServerPages(JSP)規格書1.0的商業化產品。JSP是一種強大的伺服器端技術,它是用於創建復雜Web應用的一整套快速應用開發系統。JRun可以使我們開始開發並測試Java應用。它最多接受5個並發的連接並且包括全部JavaServletAPI,支持JavaServerPages(JSP),支持所有主要的Webservers和計算機平台。JRunPro能夠在生產環境下承受大訪問量的負載,幫助我們實施應用、服務或Web站點(包括內聯網)。JRunPro支持無限量並發式連接運行多個Java虛擬機,包括多個並發的Java虛擬機(JVM)。提供一個遠程管理applet以及一個遠程可再分布式的管理applet。JRunProUnlimited包括了所有JRunPro的功能,除次以外,還可以運行無限量的,並發的JVM。JRun依靠其內置的JRunWebServer可以單獨運行。使用伺服器端Java,用戶可以開發出復雜的商業應用系統。最重要的一點是,由於servlets的平台獨立性,以及更加簡單的開發、更快速的實施、更經濟的維護成本,它是CGI(CommonGatewayInterface)或Perlscripts的極佳的替代產品。缺點就是對於初學者來說,較復雜,也比較難。10、JCreator
JCreator是一個Java程序開發工具,也是一個Java集成開發環境(IDE)。無論你是要開發Java應用程序或者網頁上的Applet元件都難不倒它。在功能上與Sun公司所公布的JDK等文字模式開發工具相較之下來得容易,還允許使用者自訂義操作窗口界面及無限Undo/Redo等功能。JCreator為用戶提供了相當強大的功能,例如項目管理功能,項目模板功能,可個性化設置語法高亮屬性、行數、類瀏覽器、標簽文檔、多功能編繹器,向導功能以及完全可自定義的用戶界面。通過JCreator,我們不用激活主文檔而直接編繹或運行我們的JAVA程序。JCreator能自動找到包含主函數的文件或包含Applet的Html文件,然後它會運行適當的工具。在JCreator中,我們可以通過一個批處理同時編繹多個項目。JCreator的設計接近Windows界面風格,用戶對它的界面比較熟悉。其最大特點是與我們機器中所裝的JDK完美結合,是其它任何一款IDE所不能比擬的。它是一種初學者很容易上手的java開發工具,缺點是只能進行簡單的程序開發,不能進行企業J2EE的開發應用。
11、MicrosoftVJ++
VisualJ++是Microsoft公司推出的可視化的Java語言集成開發環境(IDE),為Java編程人員提供了一個新的開發環境,是一個相當出色的開發工具。無論集成性、編譯速度、調試功能、還是易學易用性,都體現了Microsoft的一慣風格。VisualJ++具有
下面的特點:
1)VisualJ++把Java虛擬機(JVM)作為獨立的操作系統組件放入Windows,使之從瀏覽器中獨立出來。
2)Microsoft的應用基本類庫(AFC,)對SUN公司的JDK作了擴展,使應用基本類庫更加適合在Windows下使用。
3)VisualJ++的調試器支持動態調試,包括單步執行、設置斷點、觀察變數數值等。
4)VisualJ++提供了一些程序向導(Wizards)和生成器(Builders),它們可以方便地幫助用戶快速地生成Java程序,幫助你在自己的工程中創建和修改文件。
5)VisualJ++界面友好,其代碼編輯器具有智能感知、聯機編譯等功能,使程序編寫十分方便。VisualJ++中建立了Java的WFC,這一新的應用程序框架能夠直接訪問Windows應用程序介面(API),使你能夠用Java語言編寫完全意義上的Windows應用程序。
6)VisualJ++中表單設計器的快速應用開發特性使用WFC創建基於表單的應用程序變得輕松、簡單。通過WFC可以方便地使用ActiveX數據對象(ADO,ActiveXDataObjects)來檢索數據和執行簡單數據的綁定。通過在表單設計器中使用ActiveX數據對象,可以快速地在表單中訪問和顯示數據。VisualJ++能結合微軟的一貫的編程風格,很方便進行Java的應用開發,但它的移植性較差,不是純的Java開發環境。
12、Eclipse
Eclipse是一種可擴展的開放源代碼IDE。2001年11月,IBM公司捐出價值4,000萬美元的源代碼組建了Eclipse聯盟,並由該聯盟負責這種工具的後續開發。集成開發環境(IDE)經常將其應用范圍限定在「開發、構建和調試」的周期之中。為了幫助集成開發環境(IDE)克服目前的局限性,業界廠商合作創建了Eclipse平台。Eclipse允許在同一IDE中集成來自不同供應商的工具,並實現了工具之間的互操作性,從而顯著改變了項目工作流程,使開發者可以專注在實際的嵌入式目標上。Eclipse框架的這種靈活性來源於其擴展點。它們是在XML中定義的已知介面,並充當插件的耦合點。擴展點的范圍包括從用在常規表述過濾器中的簡單字元串,到一個Java類的描述。任何Eclipse插件定義的擴展點都能夠被其它插件使用,反之,任何Eclipse插件也可以遵從其它插件定義的擴展點。除了解由擴展點定義的介面外,插件不知道它們通過擴展點提供的服務將如何被使用。利用Eclipse,我們可以將高級設計(也許是採用UML)與低級開發工具(如應用調試器等)結合在一起。如果這些互相補充的獨立工具採用Eclipse擴展點彼此連接,那麼當我們用調試器逐一檢查應用時,UML對話框可以突出顯示我們正在關注的器件。事實上,由於Eclipse並不了解開發語言,所以無論Java語言調試器、C/C++調試器還是匯編調試器都是有效的,並可以在相同的框架內同時瞄準不同的進程或節點。Eclipse的最大特點是它能接受由Java開發者自己編寫的開放源代碼插件,這類似於微軟公司的VisualStudio和Sun微系統公司的NetBeans平台。Eclipse為工具開發商提供了更好的靈活性,使他們能更好地控制自己的軟體技術。Eclipse聯盟已經宣布將在2004年中期發布其3.0版軟體。這是一款非常受歡迎的java開發工具,這國內的用戶越來越多,實際上實用它java開發人員是最多的。缺點就是較復雜,對初學者來說,理解起來比較困難。
13、Ant
AnotherNeatTool(Ant)是一種基於Java的build工具。理論上來說,它有些類似於(Unix)C中的make,但沒有make的缺陷。因為Ant的原作者在多種(硬體)平台上開發軟體時,無法忍受這些工具的限制和不便。類似於make的工具本質上是基於shell(語言)的:他們計算依賴關系,然後執行命令(這些命令與你在命令行敲的命令沒太大區別)。這就意味著你可以很容易地通過使用OS特有的或編寫新的(命令)程序擴展該工具;然而,這也意味著你將自己限制在了特定的OS,或特定的OS類型上,如Unix。Ant就不同了。與基於shell命令的擴展模式不同,Ant用Java的類來擴展。(用戶)不必編寫shell命令,配置文件是基於XML的,通過調用target樹,就可執行各種task。每個task由實現了一個實現了特定Task介面的對象來運行。Ant支持一些可選task,一個可選task一般需要額外的庫才能工作。可選task與Ant的內置task分開,單獨打包。這個可選包可以從你下載Ant的同一個地方下載。ANT本身就是這樣一個流程腳本引擎,用於自動化調用程序完成項目的編譯,打包,測試等。除了基於JAVA是平台無關的外,腳本的格式是基於XML的,比make腳本來說還要好維護一些。Ant是Apache提供給Java開發人員的構建工具,它可以在WindowsOS和UnixOS下運行,它不僅開放源碼並且還是一個非常好用的工具。Ant是ApacheJakarta中一個很好用的Java開發工具,Ant配置文件採用XML文檔編寫,所以Java程序員對其語法相當熟悉,Ant是專用於Java項目平台,能夠用純Java來開發,它能夠運行於Java安裝的平台,即體現了它的跨平台功能。它的缺點顯示執行結果只能是DOS字元界面,不能進行復雜的java程序開發。
14、IntelliJ
IntellijIDEA是一款綜合的Java編程環境,被許多開發人員和行業專家譽為市場上最好的IDE。它提供了一系列最實用的的工具組合:智能編碼輔助和自動控制,支持J2EE,Ant,JUnit和CVS集成,非平行的編碼檢查和創新的GUI設計器。IDEA把Java開發人員從一些耗時的常規工作中解放出來,顯著地提高了開發效率。具有運行更快速,生成更好的代碼;持續的重新設計和日常編碼變得更加簡易,與其它工具的完美集成;很高的性價比等特點。在4.0版本中支持Generics,BEAWebLogic集成,改良的CVS集成以及GUI設計器。
IntelliJIDEA能盡可能地促進程序員的編程速度。它包括了很多輔助的功能,並且與Java結合得相當好。不同的工具窗口圍繞在主編程窗口周圍,當滑鼠點到時即可打開,無用時也可輕松關閉,使用戶得到了最大化的有效屏幕范圍。以技術為導向的IDEA集成了調試器,支持本地和遠程的調試,即使我們需要修改一些設置上的東西使我們的工作順利進展。另外,它還提供了通常的監視,分步調試以及手動設置斷點功能,在這種斷點模式下,我們可以自動地在斷點之外設置現場訪問,甚至可以瀏覽不同的變數的值。IDE支持多重的JVM設置,幾個編譯程序和Ant建造系統,並且,它使得設置多重的自定義的類途徑變得簡單。IntelliJIdea是一個相對較新的JavaIDE。它是Java開發環境中最為有用的一個。高度優化的IntelleJIdea使普通任務變得相當容易,Idea支持很多整合功能,更重要的使它們設計的好容易使用。Idea支持XML中的代碼實現,Idea同時還會校正XML,Idea支持JSP的結構。作用於普通Java代碼的眾多功能同樣適用於JSP(比如整合功能),同時支持JSP調試;支持EJB,盡管它不包括對個別應用伺服器的特殊支持。Idea支持Ant建立工具,不僅是運行目標它還支持編譯與運行程序前後運行目標,另外也支持綁定鍵盤快捷鍵。在編輯一個Ant建立XML文件時,Idea還對組成Ant工程的XML部分提供支持。IntelliJIDEA被稱為是最好的JAVAIDE開發平台,這套軟體就是以其聰明的即時分析和方便的refactoring功能深獲大家所喜愛。缺點是較復雜,對初學者來說,理解起來比較困難。
小結
現在常用的Java項目開發環境有:JBuilder、VisualAgeforJava、ForteforJava,VisualCafe、Eclipse、NetBeansIDE、JCreator+J2SDK、jdk+記事本、EditPlus+J2SDK等等。一般開發J2EE項目時都需要安裝各公司的應用伺服器(中間件)和相應的開發工具,在使用這些開發工具之前,我們最好能熟知這些軟體的優點和缺點,以便根據實際情況選擇應用。編程工具只是工具,為了方便人們工作而開發的,各有特點,因此,選工具主要的依據自己將要從事的領域是什麼,而不是盲目的認為那種工具好,那種工具不好。最後希望大家都能找到自己合適的java開發工具
I. 編譯程序中使用的關鍵技術都有哪些應用方向
你好
編譯應用程序主要目的是開發和應用軟體及其相關文件
步驟就是,界面-代碼-編譯
J. 初學c語言時,輸入程序後運行,是執行還是預編譯預編譯是什麼為什麼最開始要有#include如
預編譯是把一個工程中較穩定的代碼預先編譯好放在一個文件里.這些預先編譯好的代碼可以是任何的C/C++代碼。而輸入程序後的運行,只是將代碼編譯成了obj(object)文件,所有obj文件經鏈接(link)成為可執行文件。而你說的執行,應該就是點擊最後生成的.exe文件了。開始要有的#include,是表明要包含的頭文件,或者其它的保存的代碼文件。只有這樣,你才可以引用到那個文件中的代碼,來供目前的文件來使用。
至於你說的什麼大型游戲的編程,應該也是這樣的一套,因為C語言就是上述生成文件的套路。游戲的編程,初學的話可以建議看《游戲編程入門》( 美 哈本),這本書基於windows平台,是為幾乎沒有游戲開發經驗的初學者寫的,循序漸進,從2D講到3D 的一些基本技術,其中的例子也非常經典,看完書基本就可以做出不錯的2D 游戲了,也有了一定的3D基礎了,之後再看一些深入的書籍像《Windows游戲編程大師技巧》。