2011年12月19日 星期一

如何在Native Visual C++ (MFC)中呼叫使用Managed C++(CLR)的.dll

首先介紹CLR & MFCdll差別

CLR(Managed C++)
CLR開發出來的Dll需安裝.NET Framework才能跑,好處是可以使用.NET Framework函式庫寫出的Dll也可在Visual Studio直接加入參考使用。

MFC(Native Visual C++ plain C++)
MFC 開發出來的Dll則可以不需安裝.NET Framework,因此無法使用.NET Framework的函式庫,寫出的Dll也無法直接加入參考使用,則要用C語言的動態或靜態載入方式。
補充:
CLI又稱共同語言規範,用來定義.NET程式怎樣運作,CLRCLI規範的實做

動作步驟:


  • 由於ManagedDll必須要註冊才能使用
    • 按開始,由程式集進入Microsoft Visual Studio Visual Studio 2010 Tools
    • 開啟Visual Studio 2010 命令提示
    •  輸入managed DLL 所在的資料夾位置
    •  輸入
      • RegAsm.exe XXX.dll /tlb:XXX.tlb /codebase  如圖↓
  • 完成上面步驟則會產生.tlb
    • 補充:
      •  tlbCLR物件。因為tlb並不是C++標準的物件,必須編譯成標準的C++類型,使得C++開發者可以使用。 tlh表示(.h)  tli表示(.cpp)
      • 使用方法:
        • #import “XXX.tlb”,然後compiler,則會在debugrelease下面產生XXX.tliXXX.tlh物件。
  • 接著Native Visual C++必須支援CLR才可編譯。
  • 支援CLR流程:
    •  點擊Project,接者點擊 XXX Properties. (XXX 為你的專案名子)
    •  展開Configuration Properties,點擊 General.
    • 點擊 Common Language Runtime Support此欄框,選擇Old Syntax (/clr:oldSyntax),確定後按套用及確定。 如圖↓

  • 為了讓CLRBuild還必須加入一個reference (System.Windows.Forms)
    • 點擊Project,接者點擊 XXX Properties. (XXX 為你的專案名子)
    • 展開Comom Properties,點擊 Framework and References
    •  點擊Add New Reference,接著點擊Browse,加入System.Windows.Forms
    • System.Windows.Forms通常路徑為: C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Windows.Forms.dll
  • 完成此步驟後 ,接者在您的程式中加入#import指令並compiler 
  • #import "XXX.tlb" no_namespace, raw_interfaces_only
  • 之後會產生出的.tlh會在專案的debugrelease資料夾中。
  • 最後,在您的專案中加入#using <XXX.dll>  using namespace YYY; (YYYdllnamespace名稱),則可使用dll中的Device function寫入控制動作
  • 或是呼叫dll中直接設定參數的function,寫法如下: 
    • #include "stdafx.h"
      #include "tchar.h"
      // Import the type library.
       
      #import "..\ManagedDLL\bin\Debug\ManagedDLL.tlb" raw_interfaces_only
       
      //ManagedDLL為你dllnamespace的名稱
      using namespace ManagedDLL; 
      
      
      int _tmain(int argc, _TCHAR* argv[])
      {
          // Initialize COM.
          HRESULT hr = CoInitialize(NULL);
       
          // Create the interface pointer.
         //ManagedClass為你dllclass的名稱
          ICalculatorPtr pICalc(__uuidof(ManagedClass));
          
          long lResult = 0;
       
          //呼叫dll中的Add function
          pICalc->Add(5, 10, &lResult);
       
          wprintf(L"The result is %d\n", lResult);
       
          // Uninitialize COM.
          CoUninitialize();
          return 0;
      }
注意: 支援CLR會與OpenCV發生衝突,因此必須關掉OpenCV
附註: dll是由project產生出來的,所以必須要有它的原始碼,才會曉得如何使用它的function
想要更加了解可參考這網站:

2011年12月7日 星期三

免費好用的記憶體虛擬磁碟工具RAMDisk來幫你加速電腦

 

[新手教室]讓免費好用的記憶體虛擬磁碟工具RAMDisk來幫你加速電腦!(含加速教學)

 你的電腦記憶體太多用不完,或是不知道怎麼利用嗎?沒關係,阿正老師介紹一套免費的軟體Dataram RAMDisk,幫你將RAM模擬成一台虛擬磁碟,可把一些常用軟體的快取目錄設定進去,加快電腦的反應速度、減少硬碟的I/O次數。RAMDisk的另 一個優點是幫你將虛擬磁碟的內容儲存在硬碟中,還可設定開機自動掛載,因此不必擔心裡面的內容一關機就不見囉! 想加快電腦速度的玩家們可別錯過了!....

2011年12月6日 星期二

執行外部程式 -- CreateProcess(),ShellExecuteEx()

要執行外部程式,ShellExecute() 與 WinExec() 都是較為簡單的方法,
但卻無法進一步掌握新的process的狀態
 
如果要進一步掌握新的process執行的狀態,可以呼叫 CreateProcess() 或 
ShellExecuteEx(),並透過 WaitForSingleObject 以等待新的process執行完後
,再繼續下一步驟,以控制程式同步
  • ShellExecuteEx() 的例子
 SHELLEXECUTEINFO   ShExecInfo   =   {0}; 
 ShExecInfo.cbSize   =   sizeof(SHELLEXECUTEINFO); 
 ShExecInfo.fMask   =   SEE_MASK_NOCLOSEPROCESS; 
 ShExecInfo.hwnd   =   NULL; 
 ShExecInfo.lpVerb   =   NULL; 
 ShExecInfo.lpFile   =    "c:\\MyProgram.exe ";                         
 ShExecInfo.lpParameters   =    " ";   //可以加參數          
 ShExecInfo.lpDirectory   =   NULL; 
 ShExecInfo.nShow   =   SW_SHOW; 
 ShExecInfo.hInstApp   =   NULL;             
 ShellExecuteEx(&ShExecInfo); 
 WaitForSingleObject(ShExecInfo.hProcess,INFINITE); 
  
  • CreateProcess()函數的例子:  
 PROCESS_INFORMATION   piProcInfo;    
 STARTUPINFO   siStartInfo; 
  
 //   Set   up   members   of   STARTUPINFO   structure. 
 siStartInfo.cb   =   sizeof(STARTUPINFO);    
 siStartInfo.lpReserved   =   NULL; 
 siStartInfo.lpReserved2   =   NULL;    
 siStartInfo.cbReserved2   =   0; 
 siStartInfo.lpDesktop   =   NULL;    
 siStartInfo.dwFlags   =   0; 
  
  
 //   Create   the   child   process. 
 CreateProcess( 
 NULL, 
 strCmdLine.c_str(), 
 NULL,   //   process   security   attributes 
 NULL,   //   primary   thread   security   attributes 
 0,   //   handles   are   inherited 
 0,   //   creation   flags 
 NULL,   //   use   parent 's   environment 
 NULL,   //   use   parent 's   current   directory 
 &siStartInfo,   //   STARTUPINFO   pointer 
 &piProcInfo);   //   receives   PROCESS_INFORMATION 
  
 //   Wait   for   the   processs   to   finish 
 DWORD   rc   =   WaitForSingleObject( 
    piProcInfo.hProcess,   //   process   handle 
    INFINITE);    
 
 
 

執行外部程式 -- ShellExecute

HINSTANCE ShellExecute(                                              
    HWND hwnd,    // handle to parent window                
    LPCTSTR lpOperation, // pointer to string that specifies operation to perform
    LPCTSTR lpFile,  // pointer to filename or folder name string
    LPCTSTR lpParameters, // pointer to string that specifies executable-file parameters
    LPCTSTR lpDirectory, // pointer to string that specifies default directory
    INT nShowCmd   // whether file is shown when opened          
   ); 
 
其中hwnd是主要執行該程式的視窗,通常就是我們自己的程式視窗。不過也可以給NULL,表示沒有特定的視窗。 lpOperation是您要執行的動 作,這個動作有三個:
  • open -- open的方式是讓系統自己依據檔案的型態來決定以何種方式開啟它。舉例來說,如果lpFile是一個可執行檔,那麼這個檔案就會 被執行。如果他是一個文件檔,則會被對應的軟體所開啟。如果開啟的是一個目錄,自然就是用Explorer來開啟囉。
  • print -- print很明顯的就是將檔案送到 printer queue裡面去列印。
  • explorer -- 原則上只能用在目錄,是用來開啟目錄用的。
lpFile正如前面所說就是一個表示要開啟的檔案。而lpParameters主要用於lpFile所指向的是一個可執行檔時,用這個參數將執行 檔所需 的參數傳給它。而lpDirectory是進行開啟動作時的預設路徑,如果是NULL,表示為預設路徑。 最後一個nShowCmd主要表示該檔案開啟時的行為,主要有下面幾個值可用:
  • SW_HIDE 執行檔案時,將視窗隱藏起來。.
  • SW_MAXIMIZE 將視窗最大化執行
  • SW_MINIMIZE 將視窗最小化執行
  • SW_RESTORE 若視窗執行時是最小化,透過此參數,可將其回復原來大小顯示。
  • SW_SHOW 以視窗預設大小顯示,並且設為主動視窗
  • SW_SHOWDEFAULT 同SW_SHOW
  • SW_SHOWMAXIMIZED 執行時將視窗最大化,並且設定為主動視窗。
  • SW_SHOWMINIMIZED 執行時將視窗最小化,並且設定為主動視窗。
  • SW_SHOWMINNOACTIVE 執行時將視窗最小化,並且不會變動現行的主動視窗。
  • SW_SHOWNA 執行時並不會變動現行的主動視窗。
  • SW_SHOWNOACTIVATE 同SW_SHOWNA。
  • SW_SHOWNORMAL 當程式執行時,若為最大化或最小化,將會回復到原來的大小,並且設定為主動視窗。
下面幾個例子介紹幾個常見的用法:
// 開啟某個目錄: ShellExecute(NULL, "open", "c:nwindows", NULL, NULL, 0);

// 開啟某個程式: ShellExecute(NULL, "open", "c:nwindowsnnotepad.exe", "c:xxx.txt", NULL, SW_SHOWNORMAL);

// 列印某份文件: ShellExecute(NULL, "print", "c:nxxx.doc", NULL, NULL, 0);

// 開啟某個網頁: ShellExecute(NULL, "open", "https://www.google.com/", NULL, NULL, 0);
 
 
Ref. 
http://msdn.microsoft.com/en-us/library/windows/desktop/bb762153%28v=vs.85%29.aspx
http://www.dev.idv.tw/mediawiki/index.php/ShellExecute%E7%9A%84%E7%94%A8%E6%B3%95
http://www.xspace.idv.tw/bo_blog/read.php?168

2011年12月1日 星期四

Winsock 2 Network Programming

Tutorials on 'Advanced' Winsock 2 Network Programming

http://www.winsocketdotnetworkprogramming.com/winsock2programming/

Chapter 5 Winsock 2 I/O Methods

http://www.winsocketdotnetworkprogramming.com/winsock2programming/winsock2advancediomethod5chap.html

2011年7月5日 星期二

OpenCV 2.3

這個檔案已經build 好 vs2010 (vc10), vs2008 (vc9) , 32bits, 64bits 都有
下載後解壓到C:\
留下自己要用的版本,其他都可以砍掉,這樣比較節省空間
為了跟其他library 搭配使用,建議還是寫 32bits 就好
哪些資料夾該砍掉?
C:\OpenCV2.3\opencv 留著,裡面是source code 跟 sample
C:\OpenCV2.3\build 裡面, bin , include 都留
C:\OpenCV2.3\build\x64 可以砍掉
C:\OpenCV2.3\build\x86 只留 vc10 (使用vs 2010)
2.3 跟 2.2 的路徑不大一樣, 所以vs 2010 那邊,把路徑重設應該就可以用了
如果遇到 "應用程式無法正確啟動", 建議自行build, 應該就可以解決了

2011年6月17日 星期五

視窗程式設計

上課時間預計7/13 下午2點開始, ...
請先至70808 問學長上課地點


目前要參加的有
計榮群
張凱棋
林哲緯
麥紘嘉
劉冠毅
許致豪
李易學

2011年6月11日 星期六

Folder browse and enumerate files

瀏覽資料夾與列出資料夾裡面的檔案,請善用底下的 code


FolderBrowse

http://www.codeproject.com/KB/files/FolderBrowse.aspx


SADirRead - directory and file list class

http://www.codeproject.com/KB/files/sadirread.aspx

CEnum - File Enumeration and File Globbing Class
http://www.codeproject.com/KB/files/CEnum_enumeration.aspx

CFileFindEx

http://www.codeproject.com/KB/files/CFileFindEx.aspx



Enumerate files and folders with combined file extensions mask
http://www.codeproject.com/KB/files/enumeratefiles.aspx



建議使用SADirRead 裡面有清楚的程式碼範例

2011年4月20日 星期三

Dropbox 免費雲端檔案同步

還不知道甚麼是dropbox 的自己google 一下,或參考這篇 http://gordon168.tw/?p=353
還沒有dropbox帳號,可以透過這連結申請 http://db.tt/twJuN2F
這樣可以幫我加大空間

建議重要的東西,如論文,程式等,可以放在dropbox資料夾裡面
他會自動幫你同步備份到網路上的空間,避免自己電腦壞掉或被偷,導致資料全都不見

2011年3月30日 星期三

EVEREST 系統偵測軟體

EVEREST 是一套可以完全顯示你系統所有資訊的五星級軟體,包括 Computer、Motherboard、Operating System、Server、Display、Multimedia、Storage、Input、Network、Devices、Software、 Config、Misc、Benchmark 共 15 大項資訊,每一項都有詳細的資訊。

google 關鍵字 "EVEREST Ultimate Edition" 下載

2011年3月24日 星期四

實驗室電腦必灌軟體

  1. 壓縮: winrar, 7-zip (free)
  2. 文字編輯: UltraEdit, Notepad++, pspad  (後面兩個是free)
  3. 雙視窗檔案總管: FreeCommander (free)  http://www.freecommander.com
  4. 看圖軟體: FastStone Image Viewer (free) http://www.faststone.org/
  5. PDF 製作: PrimoPDF (free) http://www.primopdf.com/ 
  6. 多頁列印: FinePrint
  • 上述軟體,每個人的電腦都要灌, 如果後面列很多個,就挑一個安裝
  • 沒列網址的, google一下都找得到
  • 註明free就是不用錢, 沒註明free的google 也找得到方便使用的版本
  • 關於PrimoPDF, 如果Adobe PDF做出來的pdf 檔裡面的圖亂掉了 (可能是visio圖), 建議用PrimoPDF製作

2011年3月1日 星期二

Any Video Converter -- video 轉碼

http://www.any-video-converter.com/

Any Video Converter is an All-in-One video converting tool with easy-to-use graphical interface, fast converting speed and excellent video quality. It allows you to effortlessly convert video files between popular format! It can convert almost all video formats including DivX, XviD, MOV, rm, rmvb, MPEG, VOB, WMV, AVI to MPEG-4 movie format for smart phone, FLV, AVI and MPEG-1, MPEG-2.

VirtualDub -- video 擷取,錄影,轉碼, 剪接軟體

VirtualDub is a video capture/processing utility for 32-bit and 64-bit Windows platforms (98/ME/NT4/2000/XP/Vista/7), licensed under the GNU General Public License (GPL).

http://www.virtualdub.org/index

免費軟體

2011年2月18日 星期五

Noisy time series prediction

Subject Caption Detection in News Video


Emotion recognition using bio-signal

光體積變化描述波形、皮膚電流反應、指溫感測器


 
心電圖感測器


 
呼吸感測器


 
臉部肌電訊號感測器


光體積變化描述波形 (photoplethysmographic, PPG )或稱 末稍血流量 、脈搏、血容量搏動 (blood volume pulse, BVP)


  • 血管管徑變化:利用紅外光投射在皮膚上,由於血液中白血球和血紅球吸收光度不同,造成投射光線偏離,再經由偏射角度計算出管徑連續變化波形

皮膚電流反應 (galvanic skin response, GSR)或稱皮電活動 (electrodermal activity, EDA) 皮膚導電性 (skin conductivity)

 
    • 皮膚濕度變化:情緒經由誘發而產生時,將使交感神經作用增強,於是體表皮膚的汗腺分泌增加、皮膚濕度改變,使受測者皮膚導電性增加,造成GSR訊號劇烈變化

2011年2月17日 星期四

好用的文字編輯器

所有人的電腦至少都要安裝一套好用的文字編輯器 (UltraEdit, Notepad++, pspad)
Notepad++, pspad 是free, UltraEdit 不是free
而且要會操作 多重檔案搜尋 (Find in Files)

免費硬碟partition備份與分割軟體

別用盜版的Ghost、True Image了,來試試免費硬碟備份軟體–EASEUS Todo Backup吧!
http://blog.soft.idv.tw/?p=579

官方網站:http://www.easeus.com/

partition備份: EASEUS Todo Backup 功能類似 Ghost、True Image
partition分割: EASEUS Partition Master 功能類似 Partition magic, Acronis Disk Director Suite

Facial expression recognition


Recognize seven basic emotions (from left to right): anger, disgust, fear, happy, sad, surprise and neutral, (images taken from JAFFE database).

Vision-based fingertip-writing character recognition

Vision-based fingertip-writing character recognition


 


2011年2月16日 星期三

研究成果

研究生

  • 碩二
    • 酈頤芳
  • 碩一
    • 辜士哲
    • 衛仲軒
    • 李欣霖 (鄭伯順老師)
  • 畢業學生
    • ...

簡介

本實驗室致力於機器學習(machine learning)核心技術研究,並應用於影像多媒體處理及生醫訊號處理等領域;目前主要研究主題包括:類神經網路、進化演算法影像處理、電腦視覺生醫訊號處理等,本實驗室著重在機率統計訊號處理的理論與軟體實作上,歡迎對上述領域及程式設計有興趣之同學加入。

研究計畫

  • 與醫療看護整合之身心理健康促進系統之研究(3/3)
    • 2010/11/1~2011/10/31 (國科會計畫共同主持人)
  • 以視覺為基礎之大字彙中文手寫辨識之研發
    • 2010/8/1~2012/7/31  (國科會計畫主持人)
  • 應用於遠距協同作業之多模態人機智慧型互動關鍵技術研究-子計畫一:協同作業環境下結合語音與視覺事件偵測之先進議程紀錄與後製系統(I)
    • 2010/8/1~2011/7/31  (國科會計畫共同主持人)
  • 應用於遠距協同作業之多模態人機智慧型互動關鍵技術研究-子計畫三:以視覺為基礎之協同作業互動技術研發(I)
    • 2010/8/1~2011/7/31 (國科會計畫主持人)
  • 應用於遠距協同作業之多模態人機智慧型互動關鍵技術研究-總計畫:應用於遠距協同作業之多模態人機智慧型互動關鍵技術研究
    • 2010/8/1~2011/7/31  (國科會計畫共同主持人)
  • 與醫療看護整合之身心理健康促進系統之研究(2/3)
    • 2009/11/1~2010/10/31  (國科會計畫共同主持人)
  • 基於相機內部參數估算之數位影像竄改偵測研究
    • 2009/8/1~2010/7/31  (國科會計畫主持人)
  • 與醫療看護整合之身心理健康促進系統之研究(1/3)
    • 2008/11/1~2010/3/31  (國科會計畫共同主持人)
  • 新聞影片字幕自動偵測之研究
    • 2008/8/1~2009/7/31   (國科會計畫主持人)
  • 具人臉自動捕捉之智慧型視訊監控系統技術提升研究
    • 2007/11/1~2008/10/31  (國科會小產學計畫主持人)
  • DSRC車路系統平台與前瞻關鍵技術研究發展-子計畫一:DSRC於智慧型運輸系統(ITS)之應用規劃與介面研究(2/2)
    • 2007/8/1~2008/7/31   (國科會計畫共同主持人)
  • 應用於遠端臨場機器人的行動視訊傳輸之研究與開發
    • 2007/8/1~2008/7/31  (國科會計畫主持人)
  • DSRC車路系統平台與前瞻關鍵技術研究發展-子計畫一:DSRC於智慧型運輸系統(ITS)之應用規劃與介面研究(1/2)
    • 2006/8/1~2007/7/31   (國科會計畫共同主持人)
  • 具物體追蹤、鏡頭變焦與影像重點擷取功能之智慧型人車監控系統研究
    • 2006/8/1~2007/7/31  (國科會計畫主持人)
  • 智慧型運輸系統之嵌入式車用資訊系統研究與開發
    • 2006/2/1~2007/1/31    (國科會計畫主持人)
  • DSRC車路系統平台與前瞻關鍵技術研究發展(I)-子計畫一:DSRC於智慧型運輸系統(ITS)之應用規劃與介面研究(I)
    • 2005/8/1~2006/7/31   (國科會計畫共同主持人)
  • 電腦斷層影像腹部器官分割與辨識研究
    • 2005/8/1~2006/7/31    (國科會計畫主持人)
  • 支援3gpp多媒體串流協定之監看保全系統技術提升研究
    • 2004/11/1~2005/10/31  (國科會小產學計畫主持人)
  • 建構於異質網路環境下之行動急難救護系統之研究
    • 2003/12/1~2004/7/31    (國科會計畫主持人)