Tuesday, November 20, 2012

C++&CLR&CLI&MFC


CLR 共通語言執行環境:

1.提供一個標準化且提供 Visual Basic、C#、C++多種高階語言撰寫之程式執行環境。
2.可以使用.Net Framework相關的DLL,CLR一定要裝.Net Framework。

3.寫出得Dll 可以直接被 Visual studio參考。

CLI共通語言規範:

1.CLR就是實作Microsoft的 CLI。
2.CLI 實質上是一個 Virtual machine,讓高階語言撰寫的應用程式,可以在不修改及重新編譯原來的原始程式碼之情形狀況下,於不同的系統環境中執行。

3.CLI 可以開發有關 CLR和MFC得技術。

MFC Microsoft Foundation Classes:

1.不需要安裝.Net Framework,換句話說不能使用 .Net Framework 的Dll

CLR

using namespace System: //使用.Net Framework的DLL
Console::Write(L"ASD");

int^ 、String^
可追蹤的Handle: (C++/CLI 環境下)
儲存位址,並且當堆積(Heap)做記憶體空間重整,移動其所參考的物件時,記憶體回收機制會自動更新儲存的位址。
CLR陣列跟C++陣列不同。
array^
也可
array^ 字串陣列,其元素是Handle 可追蹤。


C++


nullptr 常用於把指標指定成null。(指定成0,其不夠直觀)

int* pNumber(nullptr);




Friday, November 16, 2012

C++ & MFC Practice


MFC 應用程式

建立應用程式類別

1.繼承CWinApp
2.直接使用CFrameWnd 類別產生視窗


專案設定:

MFC的使用 : 使用MFC靜態程式庫
字元集:使用多位元組字元集
#include

class MyApp: public CWinApp
{
public :
BOOL InitInstance()
{
CFrameWnd *Frame = new CFrameWnd();
m_pMainWnd = Frame;

Frame->Create(NULL,"Hello MFC");
Frame->ShowWindow(SW_SHOW);
return true;
}
};
MyApp a_app; //Build Application

---------------------------------------------------------------------------------------

VC++ Window API

                                WindowAPI
                                   |           |
                       WinMain()      WindowProc
                                                          程式起始                                 訊息


WNDCLASSEX: 定義視窗。
ZeroMemory:設定應用程式位址。
決定視窗所有屬性。
處理視窗訊息。WindlwProc
Ready to initialize DirectX 3D.



#include
#include

LRESULT CALLBACK WindowProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);


int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrvInstance,LPSTR lpCmdLine,int nCmdShow)
{
HWND hWnd;

WNDCLASSEX wc;

ZeroMemory(&wc,sizeof(WNDCLASSEX));

wc.cbSize = sizeof(WNDCLASSEX);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInstance;
wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
wc.lpszClassName = L"WindowClass1";

wc.cbClsExtra = 0;
wc.cbWndExtra = 0;


RegisterClassEx(&wc);

RECT wr = {0,0,500,400};
AdjustWindowRect(&wr,WS_OVERLAPPEDWINDOW,false);
wc.hCursor = LoadCursor(NULL,IDC_ARROW);
wc.hIcon = LoadIcon(0,IDI_APPLICATION);

hWnd = CreateWindowEx(NULL,
 L"WindowClass1",
 L"Our First Windowed Program",
 WS_OVERLAPPEDWINDOW,
 300,300,
 wr.right - wr.left,
 wr.bottom - wr.top,
 NULL,NULL,
 hInstance,NULL);

ShowWindow(hWnd,nCmdShow);

MSG msg;

while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}

LRESULT CALLBACK WindowProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch (message)
{
case  WM_PAINT:
HDC hDC;
PAINTSTRUCT PaintSt;
RECT aRect;
hDC = BeginPaint(hWnd,&PaintSt);
GetClientRect(hWnd,&aRect);

DrawText(hDC,L"First Window SDK Programing With D3D",
-1,&aRect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER);
EndPaint(hWnd,&PaintSt);
return 0;

case  WM_LBUTTONDOWN:
break;

case WM_LBUTTONUP:
break;

case WM_DESTROY:
{
PostQuitMessage(0);
return 0;
}break;
}
return DefWindowProc(hWnd,message,wParam,lParam);
}

-----------------------------------------------------------------------------------------------------------------------

Design Pattern & Software development


Inversion of Control

創立一個Interface 讓高階模組和低階模組可以共同存取溝通所需要的值。

Test Drive Development
Visual studio 2012 用法:
http://channel9.msdn.com/Events/TechEd/Europe/2012/DEV214







Sunday, November 11, 2012

OOA&D and sofeware development-Note


A.Unit Test:

Test Drive Development,TDD:1.先了解User Case、User Stroy,其結果。2.Unit Test 不包含邏輯。3.測試成功在實作程式碼。4.程式測試其結果而不是Developer做測試。5.Code Refactroing。

B.(Inversion of Control,IoC)

1."降低類別或模組間的耦合度"。2.Dependency Injection。
3.Game Development: Reference Manager。
4. Low Coupling。

Memory Leak:
C/C++並沒有Garbage Collection,手動釋放資源 Null、移除參照。
C#、Java也可能會發生。
1.
宣告指標變數時一律給予初值。2當delete某指標後,其務必將其內容設為NULL。