作者bugmens (今天天氣好)
看板C_and_CPP
標題Re: [分享]c++ virtual function table
時間Mon Oct 15 22:10:45 2012
※ 引述《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:來的子類別最好不要當作介面使用, 或找尋其他替代方案 10/16 14:56