發表文章

目前顯示的是 4月, 2013的文章

鍵盤、滑鼠失去電力囉!

先前為了開發新的程式,整個硬體平台更換後,原本的硬碟進到 Windows 的畫面卻無法登入,請高手來查看後才發現鍵盤、滑鼠接的 USB Port 沒有電 (開機時還有),我猜想可能是 Windows Driver 未載入 (或是找不到),所以沒有開啟電源吧,當初也忘了記錄他是怎麼解決的。 結果前幾天更新主機板 BIOS 時,又發生一樣的情況,不想麻煩別人來用,直接詢問的結果竟然是重新插拔鍵盤、滑鼠就好了,真是太神奇了!

【已解決】刪除指向介面指標 (Interface pointer) 的物件不會執行解構函式 (Destructor)

一般物件在生命週期結束時,會呼叫解構函式,以便執行釋放資源的動作。但對於實作介面的物件,如果是以介面指標的方式來呼叫,竟然不會呼叫解構函式,Oh My God。讓我們一步一步來看看吧! #include "stdafx.h" #include <iostream> using namespace std; struct IAnimal { virtual void Eat() = 0; }; class Dog : public IAnimal { public: Dog() { cout << "Dog construct." << endl; } ~Dog() { cout << "Dog destruct." << endl; } void Eat() { cout << "Dog eat ..." << endl; } }; int _tmain(int argc, _TCHAR* argv[]) { Dog* pDog = new Dog(); pDog->Eat(); delete pDog; return 0; }

【已解決】C++ Event 的實作方式

Event 在 Windows 的程式設計中,已經習以為常,尤其是 Windows 的 Event。但要在 C++ 中實作,還真不曉得要如何下手,原本在 C# 中如此基本的東西,轉到 C++ 竟是如此困難。 還好 Microsoft 還是留了一手 Event Handling ,但看了半天還不是很懂,於是從 Sample code 中實驗終於大致瞭解了,所以記錄以備後用 (雖然 Microsoft 說這個功能要取消了,不過取消前還是將就著用吧!)

【已解決】循環引用的疑問

最近在移植程式的過程中,碰到一個循環引用的問題,困擾了我不少時間,所以有寫下來的必要,以免下次再犯。直接來看例子吧! 這是最上層的介面 IElement,其中的 Method 可以處理實作 IVisitor 介面的物件 #pragma once #include "IVisitor.h" // <== Cause cross reference struct IElement { virtual VOID Accept(IVisitor* pVisitor) = 0; virtual VOID Traverse(IVisitor* pVisitor) = 0; }; typedef IElement* PIElement; 接下來是 IComputer 介面,繼承 IElement 介面