Feeds:
文章
留言

Archive for 十一月 29th, 2005

立體成像技術

今天看自由時報的時候,介紹到一則新聞關於中央大學的教授完成了立體成像技術,哇~ 真是太炫了… 不需要特殊的設備,只要光源照射上去就可以出現立體影像,讓我想到科幻片中的那個立體影像一樣真是太棒了,將圖片節錄如下:
 

 

資料來源:

http://big5.chinataiwan.org/web/webportal/W3799218/Uwhatnot/A145689.html

http://tw.news.yahoo.com/051128/43/2kyxf.html

 

Read Full Post »

不同行程透過DLL共享資料

今天看了李維寫的"C++ Builder 程式設計要訣-精修篇",其中的 package 章節提到 DLL 無法達到不同行程間的資料交換,不過就我查考的資料在我的 Windows 2000 上可以透過 DLL共享資料,可能是作業系統的支援程度不一樣,因為書中出版的時間點是 Windows 95/NT 的時代,我並未在該版本的 Windows 上進行測試,也許當時 Microsoft 對於 DLL 的支援並不需要跨行程。回到主題,如果不同行程之間要透過 DLL 共享資料,必須在要共享的資料前後加上如下的宣告:
#pragma data_seg ("my_share_area")
int count = 0;
#pragma data_seg()
#pragma comment(linker, "/SECTION:my_share_area,RWS")
#pragma data_seg 是用來宣告共享區段,#pragma comment 是告訴聯結器宣告區域具有讀(R)寫(W)共享(S)屬性。如此一來,不同行程載入這個 DLL 到自己的行程中,這個區域宣告的變數只會存在一份,所以,只要在公開的函數中存取該區域的變數,就可以達到在不同行程間的資料共享。附圖是我用 VC6 寫的 DLL,並用VB6, BCB6 和 C#寫的程式,顯示的數值是從 DLL 中取出的,每按一下按鈕DLL中的 count 值會遞增 1,可以透過這三個不同的程式來了解不同行程資料共享的可行性。
透過 DLL 來達到資源共享其實本質上也是透過記憶體映射檔來實現的。
附註:
當我撰寫這個範例程式的時候,因為採用不同的開發工具,所以我將 DLL 分別複製到不同的專案目錄下來測試,發現一個我還不太能夠理解的行為,雖然使用的 DLL 一樣,可是 DLL 的位置不同(副本),程式的資料共享就會失敗。我想這個和記憶體映射檔也許有關,改天再確認一下。

Read Full Post »