Time of Update: 2018-12-04
•Run-Time Library是編譯器提供的標準庫,提供一些基本的庫函數和系統調用。我們一般使用的Run-Time Library是C Run-Time Libraries。當然也有Standard C++ libraries。 CRun-Time Libraries實現ANSI C的標準庫。VC安裝目錄的CRT目錄有C Run-Time庫的大部分原始碼。 CRun-Time
Time of Update: 2018-12-04
上篇文章寫了:Java中構造方法的執行順序,這次是C++中建構函式的執行順序。經測試按照如下順序:一、先執行靜態成員的建構函式,如果靜態成員只是在類定義中聲明了,而沒有實現,是不用構造的。必須初始化後才執行其建構函式。二、任何抽象基類的建構函式按照它們被繼承的順序構造(不是初始化列表中的順序)三、任何虛擬基類的建構函式按照它們被繼承的順序構造(不是初始化列表中的順序)四、任何非虛擬基類的建構函式按照它們被繼承的順序構造(不是初始化列表中的順序)五、任何成員對象的建構函式按照它們聲明的順序構造六、
Time of Update: 2018-12-04
使用 DEF檔案從 DLL 匯出模組定義 (.def) 檔案是包含一個或多個描述 DLL 各種屬性的 Module 語句的文字檔。如果不使用__declspec(dllexport) 關鍵字匯出 DLL 的函數,則 DLL需要 .def 檔案。.def 檔案必須至少包含下列模組定義語句:檔案中的第一個語句必須是 LIBRARY 語句。此語句將 .def 檔案標識為屬於 DLL。LIBRARY 語句的後面是DLL 的名稱。連結器將此名稱放到 DLL 的匯入庫中。EXPORTS
Time of Update: 2018-12-04
C++利用記憶體檔案對應讀寫打檔案的方法最近需要每次讀寫2TB的資料,所以找了種方法來解決。希望對大家對於讀取打檔案有所瞭解。或許哪天就能用的到。 HANDLE m_handle_file = CreateFile(strFilePath,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if(m_handle_file == INVALID_HANDLE_VALUE) {
Time of Update: 2018-12-04
什麼是MasterPage呢?我覺得就是一個模板,把不同網頁的相同部分,如導覽列,Logo,頁頭,頁尾做成一個MasterPage,這樣就可以減少工作量,不用每個網頁都維護一套代碼了。廢話少說: 1.在VS中建立一個MasterPage頁,添加New Item,添加MasterPage,示: 2. 在MasterPage中布局,注意ContentPlaceHolder是讓其它頁面用來擺放自己的控制項的。我們只需放每個網頁公用的就行了, 3. 建立頁面,選中“Select
Time of Update: 2018-12-04
在作應用系統開發時,管理配置是必不可少的。例如資料庫伺服器的配置、安裝和更新配置等等。由於Xml的興起,現在的設定檔大都是以xml文檔來儲存。比如Visual Studio.Net自身的設定檔Mashine.config,Asp.Net的設定檔Web.Config,包括我在介紹Remoting中提到的設定檔,都是xml的格式。 傳統的設定檔ini已有被xml檔案逐步代替的趨勢,但對於簡單的配置,ini檔案還是有用武之地的。ini檔案其實就是一個文字檔,它有固定的格式,節Section的名字用[]
Time of Update: 2018-12-04
namespace System.Configuration;1. 建立配置節類必須建立繼承自ConfigurationSection的對象才能進行配置資料讀寫操作,ConfigurationSection提供了索引器用來擷取和設定配置資料,需要注意的是擁有ConfigurationProperty特性的屬性才會被儲存,並且名稱要保持大小寫完全一致,如下面的代碼中,所有的"id"必須保持一樣。 class ConfigSectionData :
Time of Update: 2018-12-04
1 microsoft 提供了一個檢測指標越界訪問的工具pageheap。 2記憶體對應檔 有個一很難發現的問題是,建立基於系統調頁檔案的記憶體對應檔核心對象是通過傳入hFile為 INVALID_HANDLE_VALUE 的參數來標記的,而建立或開啟普通硬碟檔案失敗時的傳回值也是INVALID_HANDLE_VALUE. ...... HANDLE hFile = CreateFile (....) ;
Time of Update: 2018-12-04
一 1 在分析一個操作執行太慢,則需要首先分類的是IO操作密集還是cpu計算密集。 這個可以這樣區分,用虛擬硬碟工具(例如ramdisk tool)把一部分記憶體虛擬成硬碟,應用程式和基準檔案都安裝在虛擬硬碟上,如果程式效能改善明顯,則是IO相關的問題。二 2 針對IO瓶頸的最佳化: 每次IO操作大約在10ms的量級,100次就是1s左右,所以盡量避免不必要的IO,具體做法有: 預先順序讀檔案避免隨機訪問
Time of Update: 2018-12-04
測試發現,Pro*C中,不管ORACLE資料庫中的number欄位是多大,只要欄位的值大於綁定的變數所能夠容納的範圍,就會出現“ORA-01455: 轉換列溢出整數資料類型”。不過,Pro*C不支援long long(64位)類型的綁定。當number欄位的值大於2147483647或小於- 2147483648時,建議使用double類型來綁定,然後再將double類型轉換成long long類型。double temp;long long value;//…EXEC SQL SELECT
Time of Update: 2018-12-04
編碼中發現一個奇怪的編譯錯誤,花了很長時間才找到問題所在。下面把重現這個問題的最精簡的代碼貼出來:/**//*MyClass.h存在一個namespace和一個類*/#ifndef _MY_CLASS_H_#define _MY_CLASS_H_namespace MySpace...{class MyClass...{public: int Field;};}#endif 下面的一個檔案聲明一個全域的指標,因為僅僅指示聲明,所以盡量不包含其他檔案:/**//*global.
Time of Update: 2018-12-04
一)位元組序,顧名思義位元組的順序,再多說兩句就是大於一個位元組類型的資料在記憶體中的存放順序(一個位元組的資料當然就無需談順序的問題了)。其實大部分人在實際的開發中都很少會直接和位元組序打交道。唯有在跨平台以及網路程式中位元組序才是一個應該被考慮的問題。在所有的介紹位元組序的文章中都會提到位元組序分為兩類:Big-Endian和Little-Endian,引用標準的Big-Endian和Little-Endian的定義如下:a) Little-Endian就是低位位元組排放在記憶體的低地址端,
Time of Update: 2018-12-04
最近在研究驅動的代碼,發現這樣一個宏,沒太搞懂什麼用途:#define E1000_ROUNDUP(i, size) ((i) = (((i) + (size) - 1) & ~((size) - 1))) 調用的時候是這樣的: unsigned int i = 4097; E1000_ROUNDUP(i, 4096); 拆解這個運算,還是沒明白到底要幹什麼:簡化的運算式相當於: i = (i + 0x00000fff) | 0xfffff000;
Time of Update: 2018-12-04
Pro*C中批量讀取遊標中的資料的時候,需要注意:最後一次批量讀取遊標中的資料的時候,資料被取到HostArray中,同時sqlca.sqlcode被置為1403(NO_DATA_FOUND)。如果在fetch後立即判斷sqlca.sqlcode的話,可能就導致最後一次的資料取不到。 保險的辦法是定義一個變數記錄上次的讀取條數:if (sqlca.sqlcode==1403 && sqlca.sqlerrd[2]<=nLastCount){
Time of Update: 2018-12-04
int i=atoi(m_strSendPeriod); //轉為整型SetTimer(1,m_strSendPeriod,NULL); ////////////////////////////////////////////////////////////////////// _itoa, _i64toa, _ui64toa, _itow, _i64tow, _ui64tow Convert an integer to a string. char *_itoa( int
Time of Update: 2018-12-04
最近因為忙!!經常外出工作!有時晚上趕不回公司,所以就在網上下了個自動關機程式!!不過自己一直想自己寫個!!但還不會調用API所以就想用C寫了個!!以後會用API寫的的!雖然沒技術含量,但必竟是自己寫的,還是比較開心的!!不過程式很簡單!!只是調用了系統的自動關機罷了!!代碼如下:#include <stdio.h>#include <stdlib.h>int main(){ system ("at 00:00 shutdown -s");
Time of Update: 2018-12-04
用來存放數組的地區是一塊在棧中靜態分配的記憶體(非static),而數組名是這塊記憶體的代表,它被定義為這塊記憶體的首地址。這 就說明了數組名是一個地址,而且,還是一個不可修改的常量,完整地說,就是一個地址常量。數組名跟枚舉常量類似,都屬於符號常量。數組名這個符號,就代表 了那塊記憶體的首地址。注意了!不是數組名這個符號的值是那塊記憶體的首地址,而是數組名這個符號本身就代表了首地址這個地址值,它就是這個地址,這就是數組
Time of Update: 2018-12-04
今天看到了一道c#筆試題,是關於靜態欄位和靜態建構函式初始化的。靜態函數是c#新的特性,如果不知道它的初始化順序就會對這道題暈頭轉向。對於靜態建構函式可以參考http://www.cnblogs.com/michaelxu/archive/2007/03/29/693401.html。下來從這道筆試題來分析一下靜態建構函式的初始化順序。 1 class A 2 { 3 public static int X; 4 static A() 5 { 6 X =
Time of Update: 2018-12-04
摘抄自more effective c++ 仔細想想地位卑賤的類型轉換功能(cast),其在程式設計中的地位就象goto語句一樣令人鄙視。但是它還不是無法令人忍受,因為當在某些緊要的關頭,類型轉換還是必需的,這時它是一個必需品。 不過C風格的類型轉換並不代表所有的類型轉換功能。 一來它們過於粗魯,能允許你在任何類型之間進行轉換。不過如果要進行更精確的類型轉換,這會是一個優點。在這些類型轉換中存在著巨大的不同,例如把一個指
Time of Update: 2018-12-04
C++的static有兩種用法:面向過程程式設計中的static和物件導向程式設計中的static。前者應用於普通變數和函數,不涉及類;後者主要說明static在類中的作用。 一、面向過程設計中的static 1、靜態全域變數在全域變數前,加上關鍵字static,該變數就被定義成為一個靜態全域變數。靜態全域變數有以下特點: 該變數在全域資料區分配記憶體; 未經初始化的靜態全域變數會被程式自動初始化為0(自動變數的值是隨機的,除非它被顯式初始化);