看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《descent (返無)》之銘言: : ※ 引述《bugmens (今天天氣好)》之銘言: : : 感謝原PO的分享,順著這篇我也將我的問題提出來問看看 : : 這是OpenCV中的cap_dshow.cpp一小部份http://tinyurl.com/9lkrfdc : : class CvCaptureCAM_DShow : public CvCapture : : { : : public: : : CvCaptureCAM_DShow(); : : virtual ~CvCaptureCAM_DShow(); : : virtual bool open( int index ); : : virtual void close(); : : virtual double getProperty(int); : : virtual bool setProperty(int, double); : : virtual bool grabFrame(); : : virtual IplImage* retrieveFrame(int); : : virtual int getCaptureDomain(); : : protected: : : void init(); : : int index, width, height,fourcc; : : IplImage* frame; : : static videoInput VI; : : }; ^^^^^^^^^^^^^ : static 變數可能存放在 bss section, : function 應該是存在 text section, : 但這不是絕對的, 很有可能這個 section : 根本沒關係, 無法互相推斷。 : 組合語言下沒有秘密, 請反組譯之後搭配 : 執行檔剖析工具觀察。 : 在 linux 我會使用 objdump, readelf : 來觀察這些變數存在哪裡。 : 有什麼目的要這麼做呢? 在OpenCV中利用cvCaptureFromCAM(0)函式並填入不同的編號來取得攝影機 但哪個編號對應到哪一台攝影機是不知道的,所以我想得到以下的結果 編號 攝影機名稱(friendly name) 0 Logitech Carmea 1 xxx USB Cam 2 HAMA PC-WEBCAM AC-130 但在OpenCV 2.x藉由VideoInput Library就可以得到攝影機名稱 這個函式名稱叫做listDevices int videoInput::listDevices(bool silent) { ... hr = pPropBag->Read(L"Description", &varName, 0); if (FAILED(hr)) hr = pPropBag->Read(L"FriendlyName", &varName, 0); ... } 所以我才想要得到videoInput物件位置,因為我想用這篇的技術來呼叫listDevices函式 http://www.codeproject.com/Articles/9405/ Using-classes-exported-from-a-DLL-using-LoadLibrar 我已經能從BCB6使用OpenCV 2.42的dll了,我想進一步擴充功能 希望能從功能表直接從名字選攝影機,而不要再用編號來選擇 http://delphi.ktop.com.tw/board.php?cid=168&fid=921&tid=81943 從OpenCV原始碼新增GetvideoInput函式後再用vs2010重新編譯也是個方法 或是到videoInput網站下載程式碼也是解決辦法 http://www.muonics.net/school/spring05/videoInput/ 只是剛好遇到原PO發表的文章,所以才好奇問變數會放在哪裡 但看起來這條路應該不簡單,再次感謝各位網友的回應 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 1.164.229.154
holymars:不要依賴object的memory layout來寫程式 那是undefined 10/15 23:16
holymars:最好都交給compiler去處理.. 10/15 23:16
loveme00835:http://ideone.com/13sag 不是很建議這樣做, 所以多出 10/16 14:56
loveme00835:來的子類別最好不要當作介面使用, 或找尋其他替代方案 10/16 14:56