web 2.0

0 意見

necktie

0 意見

DLL

0 意見

DLL的載入大致上分兩種

1 、 隱式連結(Implicitly Link)(也叫載入期動態連結 Load-Time Dynamic Linking)



這種是屬於靜態載入,就是指,程式編譯時會預留函式的空間。所以當程式被Windows的loader載入到記憶體中後,loader會自動檢查執行檔中所有的import function的定義,把所有需要的DLLs都載入到記憶體裡面。

優點:

1、 使用DLL裡面的Function的方法,就像是包含在自己程式裡面的function一樣可以使用。


2 、 動作較為簡單,載入的方法跟尋找DLL的動作由作業系統負責處理,應用程式不用調整也無法去干涉。


缺點:

1 、 當找不到DLL時,程式就不能開啟(就是常見的找不到xxx.dll)。

2 、 編譯時需要先include DLL的宣告檔(通常是.h)。

3 、 隨著載入的DLLs增加,載入應用程式的速度會便慢。

4 、 若遇到不同品牌 的C++編譯器時靜態載入可就沒有這麼簡單處理了,因為當函式經過Calling Conventions的處理後,若要使用其他品牌編譯器所致造出的DLL須得大動干戈才行。


2 、 顯式連結(Explicit Linking)



跟他的名字一樣,就是在程式執行的過程中動態載入DLL,用完了就馬上釋放DLL

優點:

1 、DLL只要需要時才會載入到記憶體中,可以更有效的使用記憶體。

2 、 應用程式開始的時候不用先載入DLL,所以載入速度比上面的方法快。

3 、 編譯時不須額外include DLL函式的宣告檔。

4 、 讓我們可以更清楚DLL的載入流程。

缺點:

要多花一些程式碼來處理載入的過程!


下面是test.cpp,他會產生一個test.dll


1. #include

2. #include

3. using namespace std;

4.

5. __declspec( dllexport ) int AddFunction(int a, int b)

6. { return a+b; }

7. __declspec( dllexport ) int SubFunction(int a, int b)

8. { return a-b; }

9.

10. // 進入點

11. BOOL APIENTRY DllMain( HANDLE hModule,

12. DWORD ul_reason_for_call,

13. LPVOID lpReserved)

14. {

15. return TRUE;

16. }


接下來要教如何在程式過程中載入DLL,只有三個步驟,那就稱它為動態載入三步驟:

1.使用LoadLibrary()函式載入DLL

2.使用GetProcessAddress() 函式取得所要使用的函式的位址

3.不需要用到此DLL時,呼叫FreeLibrary()函式將DLL釋放


先把使用的程式寫出來




1. #include

2. int WINAPI

3. WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,

4. LPSTR lpCmdLine, int iCmdShow){

5.

6. HINSTANCE hTest;

7. HMODULE myPlugin=NULL;

8. myPlugin = LoadLibrary( " test.dll " )

9. //宣告function

10. typedef int (*PFNAddFunction)( int a , int b);

11. PFNAddFunction pfnAdd = (PFNAddFunction)GetProcAddress( myPlugin, "?AddFunction@@YAHHH@Z" );

12. //宣告function

13. typedef int (*PFNSubFunction)( int a , int b);

14. PFNSubFunction pfnSub = (PFNSubFunction)GetProcAddress( myPlugin, "?SubFunction@@YAHHH@Z" );

15.

16. int ans;

17. ans = pfnSub(5,3); //ans會是2

18. ans = pfnAdd(6,4); //ans會是10

19.

20. FreeLibrary(hTest);

21. return 0;

22. }


最有疑問的是GetProcAddress裡面的 ?AddFunction@@YAHHH@Z 是怎麼出來的??

那是我用VS2005編譯出來的函式名稱,當我們編譯成DLL後可以用VC6有附的一個工具,叫做Dependency Walker 來看編譯出來的address。


其他內容就應該是很簡單的了。


內容轉載自 維尼的蜂巢

Blogger template

0 意見

http://outdoorsy-btemplates.blogspot.com/
http://btemplates.com/2008/07/25/agenda-03/

http://btemplates.com/category/brown/page/3/

My throat hurt !!!

0 意見

治療方法

少說話 假裝自己是啞巴。
降低音調 如果非說話不可,克制點小聲說。

止渴 多喝水。
使用蒸氣 蒸氣可以濕潤喉嚨,建議浴缸內或廚房流放熱水,用毛巾蓋在臉上吸熱氣,或直接轉開蓮蓬頭熱水,自製蒸氣浴。
增加空氣濕度 睡覺或任何時間,調開潮濕機。

試試蜂蜜茶 茶加蜂蜜是傳統的喉嚨痛治療方法。

漱口要適度 每天一、兩次讓你感覺較為舒服,但是太頻繁,特別是市面上的漱口水,反會造成刺激。

冷凍治療 多喝冰凍果汁。

選擇好喉糖 含有甘油的是較好的選擇。甘油讓喉嚨組織保持濕潤。最好不用含薄荷或薄荷醇的喉糖,它們使喉嚨更乾燥而疼痛。

止痛藥 如Acetaminophen或ibuprofen。使用Aspirin時,用吞的,不用吸的。Aspirin用吸的,開始可能得到舒緩,但有可能刺激喉嚨,造成酸性灼傷。

先治療鼻塞 鼻塞讓你用嘴巴呼吸,刺激喉嚨。
致力改善各種過敏 如果真是過敏,抗組胺的藥物能有緩解作用,但會使喉嚨乾燥,記得多喝水,另外它也會使人昏昏欲睡。

攝取清淡食物 避免刺激喉嚨,吃低溫口味淡的食物。

div & span

0 意見

Div 這個標籤目的是將內容分為不同的區域,而每一個區域可以根據 CSS 中的宣告而有自己的樣式。Div 是一個區塊級容器 (block-level container),這代表在 標籤後會換行。

Span 跟 Div 類似的地方是,這兩個標籤的目的都是將內容分為不同的區域。不同的是,Span 可以涵蓋更細層的元素。所以,我們甚至可以用 來調整單一文字的樣式。另外,在 之後並不會換行。

利用JS判斷中文字

0 意見

function engstr(str)
{
alert(str.length);
var subStr=”";
for(i=0,n=str.length;i{
subStr=str.charCodeAt(i);
if(subStr > 256)
{
alert(”中文”);
return false;
}
}
alert(”English”);
return true;
}

Hello World

0 意見

我的網誌一換再換...
沒辦法
WordPress功能有限...又沒自己的伺服器
而且速度有點慢
就用blogger囉~

Hello World !!!