跳到主要內容

發表文章

c++(/clr)非託管類型和託管類型互轉

c++(/clr)非託管類型和託管類型互轉 轉載於: http://www.cnblogs.com/kekec/archive/2011/03/25.html 以下代碼必須有「Common Language Runtime Support(/clr)」 和「MFC」支持 1. 字符竄之間的轉換 1 // 託管類型到非託管類型 2 inline CString ManageToUnManageStr(System::String^ cmStr) 3 { 4 using namespace System::Runtime::InteropServices; 5 CString cStr = (char*)(Marshal::StringToHGlobalAnsi(cmStr)).ToPointer(); 6 return cStr; 7 } 8 9 // 非託管類型到託管類型 10 inline System::String^ UnManageToManageStr(const CString& cStr) 11 { 12 const char* cc = (LPCTSTR)cStr; 13 System::String^ cmStr = gcnew System::String(cc); 14 return cmStr; 15 } 2. 對象之間的轉換 1 // _variant_t到Object對象 2 inline System::Object^ VarToObject(_variant_t var) 3 { 4 using namespace System::Runtime::InteropServices; 5 System::IntPtr^ pvar = gcnew System::IntPtr(&var); 6 System::Object^ obj = Marshal::GetObjectForNativeVariant(*pvar); 7 return obj; 8 } 9 10 // Object對象到_variant_t 11 inline _variant_t* ObjectToVar(System::Object^ obj) 12 { 13 using namespace...

C 和 C++ 的 Callback

C Callback Function with C++ Class 轉載於: http://lak4cyut.blogspot.tw/2008/08/c-callback-function-with-class.html 由於 C/C++ 語言的特性,許多 API 是必需要利用 Callback function 才能完成作用 在 C 的時代這是很合理也很直覺化的設計,但若將場景拉到 C++ 呢.... --此篇除了介紹 How 之外,也將對 Why 進行簡單的介紹,希望能夠令不知其所以然的人有所幫助。-- Effective C++m 一書將 C++ 視為一種語言聯邦,而其中最簡單及常被討論到的,我想大概是屬於 OOP 的部份。 在 C++ 中利用 Class 來實現 OO 的許多精神,許多的程式設計都會採用 OO 的封裝特性,也因此當你需要使用某些 API 時,會面臨到 callback function 設計不易的問題。包括如何取用物件內的屬性、如何將物件傳入等問題,假設利用 non-member function 來設計 callback function,為了能令 callback function 順利的存取相關的物件內的資料,可能會在某種程度上破壞掉物件的封裝性。 因此,若以封裝性的角度來看,我們當然會希望能夠直覺的以 class member function 來做為 callback function,如此一來,便可以在不破壞封裝性的情況下,依然順利的使用物件內的屬性。 在這個前提下,便會很直覺的寫出以下的程式段: class CMyClass { public: void Mainfunc() ; void CBfunc(void *) ; private: int iData ; int iInc ; } int CMyClass::CBfunc(void *iIncLoc) { int _i = (int)iIncLoc ; return iData+_i ; } void CMyClass::Mainfunc() { // APIfunc( *pCallback, *pParam) APIfunc(CBfunc, iInc) ; // error !! } 但卻也可以...

boost安裝: vs2008[轉載]

boost安裝: vs2008 [轉載] boost是C++的准標準庫,不學是要吃虧的!在這裡記錄下boost在VS2008上的編譯及配置方法,以前編譯過很多次了,到現在還是需要查資料,在這裡記錄下。。。 下載boost後解壓,然後進入boost文件夾下的tools\build\v2,根本不需要做什麼什麼修改,直接雙擊運行bootstrap.bat就可以獲得bjam.exe,然後將bjam.exe拷貝到上兩級文件夾中,即boost根目錄下,然後啟動windows的cmd進入boost的根目錄,運行如下指令 bjam.exe --toolset=msvc-9.0 --link=static --runtime-link=shared --threading=multi --without-python stage debug release 這樣就可以編譯出靜態庫的boost,既然boost是准標準庫,就跟stl一樣對待吧! 將boost/stage/libs下的所有lib文件都拷貝到vs2008的VC目錄下的libs中,然後將boost根目錄下的boost的文件夾拷貝到VC下的inlcude中,這樣就可以跟STL一樣使用boost了,並且不需要在運行時手動的指定鏈接庫。 這裡舉個例子,創建windows控制台應用程序工程,然後添加如下代碼 #include #include void func() {  std::cout << "Boost Thread Test!" << std::endl; } int main(int argc,char ** argv) {  boost::thread thread(&func);  thread.join(); } 如果編譯上述代碼沒有錯誤,那麼說明boost已經配置成功了。

.NET操作EXCEL時出現的錯誤

  在免部署 Office PIAs (Primary Interop Assemblies) 的情況下存取 Office 物件模型 (以下轉載) Microsoft::Office::Interop::Excel::ApplicationClass ^app  = gcnew Microsoft::Office::Interop::Excel::ApplicationClass(); Microsoft::Office::Interop::Excel::WorkbookClass ^wrk = app->Workbooks->Add() ASP.NET操作EXCEL時出現的錯誤 Retrieving the COM class factory for component with CLSID(轉) 解決方案: 運行dcomcnfg打開組件服務 依次展開"組件服務"->"計算機"->"我的電腦"->"DCOM配置" 找到"Microsoft Excel應用程序" 右鍵打開屬性對話框,點擊"標識"選項卡 點"下列用戶",把管理員的用戶密碼正確填寫進去... 點擊"安全"選項卡, 依次把"啟動和激活權限","訪問權限","配置權限",都選擇為自定義, 然後依次點擊它們的編輯,把everyone添加進去,並加入所有的權限... OK,解決此問題! MMC是以x64來執行的,它會排除掉x32的DCOM伺服器,如下,看不到Microsoft Excel Application 解決方式也很容易,就是要以x32方式執行MMC已開啟元件服務,我們知道元件服務是"comexp.msc"這個描述檔後, 只要在開始工具列-->執行 如下命令: mmc comexp.msc /32

別了,連長

2011/8/27,算來你也14歲了。 雖然我喜歡你的程度比不上馬克,但是依然把你視為家庭裡的一員。 你然沒有馬克的機靈,但是比馬克還勇敢。 26號晚上回台中,看到你骨瘦如材無法動彈,傷口還不斷潰爛。 時而哀嚎,哥哥知道勇敢的你,一定承受很大的痛苦。 喊了你一聲,看你努力的掙扎,好像要爬起來,照往常一樣迎接哥哥。 我真的好難過,好難過… 原諒哥哥做的決定,把你送到動物醫院也是逼不得已的。 哥哥實在不願意看到你繼續痛苦下去。 希望你來生,可以快快樂樂的過一輩子。

婚事昏事

結婚的過程中,加入的討論婚事的親友會 越來越多。 當中某些人會有一個小小的要求。 然後很多人就 變成很多小小的要求… 而最無奈的是,通常在這些小小的 要求中,總是會有互斥的事件發生。 我們通常會去追求遙不可及的最佳解,而結果往往是徒勞無功。 親友們都是基於『關心』,當然也可以解釋為湊熱鬧。 但畢竟最後是我們兩個人要私守到老,那群敲鑼打鼓的人,結婚完之後,就拍拍屁股走人了。 這個情節,正是愛情媽媽咪一劇要表達的。 我們希望尋求每個人的祝福,不過不希望他們的『祝福』,形成我們的夢魘。

Opencv : Building the OpenCV 2.2 library using CMake

Building the OpenCV 2.2 library using CMake 1. Install CMake 2. Start the CMake GUI from Start menu 3. Select: * Where is the source code: (the directory where CMakeLists.txt in OpenCV is stored), eg: "C:\Program Files\OpenCV2.2" * Where to build the binaries: (the directory where the OpenCV library will be built), eg: "C:\Program Files\OpenCV2.2\build" 4. Press Configure and select Visual Studio 2008 or 2010 project. 5. Enter any parameters, like if you want to build Python bindings, documentation, shared libraries, use TBB, CUDA, Eigen2 libraries, etc. (Note that TBB, 64-bit and CUDA may still be under development and therefore buggy) 6. Repeat pressing Configure until no more red rows are highlighted. 7. When ready, press Generate. 8. Open the "build" directory, where you will find your VS2008 or VS2010 "sln" file. 9. Open the sln file in VS2008 or VS2010, and Built the Solution. This should compile the OpenCV 2.2 library into th...

難捨

每次星期天要和你道別的時候,心中總是有很多不捨。 只能告訴自己,很快的又能見面了。 在擁擠的火車上,思念還是停留在妳的身上。 那時深深的覺得,有一個能夠去呵護而值得愛的人,是一種幸福。

Opencv : 找輪廓並算面積

cvSmooth(imgMain,imgMain); cvCvtColor(imgMain,imgGray,CV_BGR2GRAY); cvCanny( imgGray, imgCanny, 50, 250); cvDilate(imgCanny,imgCanny); //合併小區域. cvThreshold(imgCanny,imgCanny,50.0,255,CV_THRESH_BINARY);//設定輪廓閾值 cvSaveImage("testImageA.bmp",imgMain); double area=0; CvMemStorage * storage = cvCreateMemStorage(0); CvSeq * contour = 0; int mode = CV_RETR_EXTERNAL; contour = cvCreateSeq(CV_SEQ_ELTYPE_POINT, sizeof(CvSeq), sizeof(CvPoint) , storage); cvFindContours(imgCanny, storage, &contour, sizeof(CvContour), mode, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0)); cvDrawContours(imgDst, contour, CV_RGB(0,0,255), CV_RGB(255, 0, 0), 2, 2, 8, cvPoint(0,0)); // int area_num=0; for( CvSeq* c = contour; c != 0; c = c->h_next ) { area = cvContourArea(c); area=area; area_num++; stboxMessage->Items->Add(String::Format( "The area of patern : {0}", area )); }

Opencv : 找角落的點

//不太實用(?) 先保存下來 CvSize imgSize=cvGetSize(imgMain); imgDst=cvCreateImage(imgSize,32,1); IplImage* imgGray=cvCreateImage(imgSize,8,1); cvCornerHarris(imgMain,imgDst,3); double minVal,maxVal; cvMinMaxLoc(imgDst,&minVal,&maxVal); cvConvertScale(imgDst,imgGray,255/(maxVal-minVal)); cvSaveImage("testImage.bmp",imgGray);

Opencv : Visual Studio內加入OpenCV可能遇到的錯誤

安裝完 OpenCV 並在 Visual Studio 設定好環境變數之後 加入 #include "cv.h" #include "highgui.h" #include "cxcore.h" 可能遇到下列錯誤 1>c:\program files\opencv\cxcore\include\cxtypes.h(205) : error C3862: 'cvRound': cannot compile an unmanaged function with /clr:pure or /clr:safe 1> Inline native assembly not supported in managed code 1>c:\program files\opencv\cxcore\include\cxtypes.h(205) : error C3645: 'cvRound' : __clrcall cannot be used on functions compiled to native code 1>c:\program files\opencv\cv\include\cvcompat.h(784) : warning C4819: The file contains a character that cannot be represented in the current code page (950). Save the file in Unicode format to prevent data loss 1>Snake.cpp 1>c:\program files\opencv\cxcore\include\cxtypes.h(205) : error C3862: 'cvRound': cannot compile an unmanaged function with /clr:pure or /clr:safe 1> Inline native assembly not supported in managed code 1>c:\program f...

Opencv : Cannot find or open the PDB file???

工具 》 選項 》 偵錯 》 符號 接下來就是選擇 Microsoft ,然後確認,重新編寫一個程序,什麼也可以,看看是不是好了?你沒有發現編譯很慢 ? 看到此目錄下符號緩存了嗎?找到這個目錄拷貝出來,找個地方存放。接下來就是去掉 Microsoft 符號服務器,要是不去,每次都要從 Microsoft 下載很麻煩,已經緩存了,我們就可以利用好這些緩存,至此完美解決。

Opencv : 安裝

Vusial Stdio 2010 ( VC2010 )下安裝 OpenCV2.1 轉自: http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=10070&p=39565&hilit=visual+2010#p37694 本文主要來自 heyoup 的「 面對面教你如何在VS2010 下配置OPENCV2.1 」,只是稍作編輯,參考其他地方的資料改正些許重要錯誤和缺漏。 環境: windows 7+visual studio 2010+opencv 2.1 ,成功! xp 更應該能成功。耐心點,按下面的一步一步來,應該是沒什麼問題的,祝您好運啦! 1 、下載文件 OpenCV2.1 官方地址: http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.1/OpenCV-2.1.0-win.zip/download 推薦本論壇地址: http://www.opencv.org.cn/download/OpenCV-2.1.0-win32-vs2008.exe CMAKE 2.8.1 http://www.cmake.org/files/v2.8/cmake-2.8.1-win32-86.exe INTELTBB3.0 http://www.threadingbuildingblocks.org/uploads/77/151/3.0/tbb30_20100406oss_win.zip 2 、首先安裝 CMAKE2.8.1 ,然後將 OpenCV2.1 安裝到你將要放置 OPENCV 的地方,接著,解壓 INTEL TBB 3.0, 比如將 OPENCV 和 TBB 都放在 D:\Program Files 裡面。並在 OpenCV 文件夾下創建子目錄 D:\Program Files\OpenCV2.1\vs2010 ,用於存放編譯結果。 檢查 D:\Program Files\OpenCV2.1\bin 和 D:\Intel TBB 3.0\bin\ia32\vc10 是否已經被加入到環境變量 ( 我的電腦 - 屬性 - 環境變量 )PATH ,如果沒有,請加入。加入後需要註銷當前 Windows 用戶(或重啟)後...

Opencv : cvMatchTemplate

1.result 中數據的含義。 模板匹配函數 cvMatchTemplate 依次計算模板與待測圖片的重疊區域的相似度,並將結果存入映射圖像 result 當中,也就是說 result 圖像中的每一個點的值代表了一次相似度比較結果。 2.result 的尺寸大小。 如圖可知,模板在待測圖像上每次在橫向或是縱向上移動一個像素,並作一次比較計算,由此,橫向比較 W-w+1 次,縱向比較 H-h+1 次,從而得到一個 ( W-w+1 ) × ( H-h+1 )維的結果矩陣, result 即是用圖像來表示這樣的矩陣 , 因而圖像 result 的大小為( W-w+1 ) × ( H-h+1 )。 3. 如何 result 中獲得最佳匹配區域 使用函數 cvMinMaxLoc(result,&min_val,&max_val,&min_loc,&max_loc,NULL); 從 result 中提取最大值(相似度最高)以及最大值的位置(即在 result 中該最大值 max_val 的坐標位置 max_loc ,即模板滑行時左上角的 坐標,類似於圖中的坐標( x,y )。) 由此得到: rect=cvRect(max_loc.x,max_loc.y,tmp->width,tmp->height);rect 表示的矩形區域即是最佳的匹配區域。

喜悅

親愛的,恭喜你找到工作。 知道你被全國意向錄取,我打從心裡為你高興。 高興的原因不是因為你找到工作,而是找到你自己想要的工作。 人生總是需要一步一步的往前踏,我們無須替還不確定的未來煩憂。 認真面對現在的每一刻,等到事情有所變化,我們再來討論下一步應該要怎麼做。 否則我們對於未定的未來,永遠有一百個假設,有一百個解法。 這樣只是自尋煩惱… 不管如何,我的摯愛,恭喜你了!

身體警訊

身體不聽話了,看來非得早睡早起才行!

戰果

既然堅持要看『媽媽呀』後一天的戰果,只好上傳留念啦!

兩個家

第二次到山上的家,住了三天。 感覺一切都很好。(除了中午的氣溫和蚊子之外) 不管是媽媽、小魚、帥帥、和小寶,以及滿斗星空都很讓人喜歡。 回程時妳和我一起回台中。 第一次喝到妳煮的竹筍湯,坦白說真的蠻好喝的。 第二天的行程,原諒我的不細心。 行程逾半,才想到應該延到第三天,妳才能盡興。 這六天我深深覺得,不管是你我感覺契合,或是家人對妳我,彼此的觀感都很不錯。 我們一定能夠平平順順的幸福一生。