作者chengcti (卡馬請出來面對!!)
看板C_and_CPP
標題Re: [問題] Media Foundation of COM
時間Mon Oct 8 09:33:48 2012
※ 引述《ThomasHuang (命賤如草)》之銘言:
: 1.這個專案會產生一個COM元件包在DLL檔裡,還是會是一個單純的DLL檔。
: 我觀察這個專案架構,發現裡面有很多DLL開頭的函式,
: 其中包含了DllRegisterserver & DllUnregisterserver,
: 並且也有GUID的宣告,所以應該是個COM元件。
: 但是COM元件不是都應該有介面嗎?我找了很久,
: 都沒有看到CClassFactory & CGrayscale兩個類別的介面宣告,
: 所以這個專案到底是COM元件還是單純的DLL?
COM, but it's based on DLL (in-process server) not EXE(out-process server)
: 2.Dll開頭的函式,到底是做甚麼用的。
: 一般單純的DLL只會有DllMain,但是這個專案中有很多Dll開頭的函式,
: 不知道高手們可不可以為小弟解釋一下,需要這些函式的原因,
: 與這些函式的功用。
COM in-process server 需要實作四個 entry
DLLRegisterserver, DLLUnregsiterserver
DllGetClassObject - real entry
DllCanUnloadNow
前兩個會在 type libery 內註冊 com 的 version, directory 等
當 call by name 時, 可以由typelibery找到元件的位置.
: 3.這個專案是怎麼開出來的。
: 小弟使用VS2010分別開啟新的DLL專案與ATL專案,
: 想藉由觀察全新的專案來判斷這個專案屬於哪一種,
: 但是開出來的都與這個專案不同,這讓我非常的疑惑,
: 到底這個專案是怎麼做出來的,還是說是需要自己刻出來,
: 無法使用專案範本?
vs2010 ATL template 自己產生對應的 function
: 4.這樣的專案要怎麼除錯
: 這不是一般常見的專案,為了方便除錯經常會用到單步執行功能,
: 想請問一下這種專案要怎麼單步執行以除錯呢?
要自己 create 一個 host, in-process server 是由 host 啟動而非
自己啟動. 故要有一個 host 作 debug 宿主
REF:
http://msdn.microsoft.com/en-us/library/f1tkezh9(v=vs.71).aspx
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 42.72.131.130
推 ThomasHuang:還想請問 DllAddRef & DllRelease 又是做什麼的呢 10/08 11:52
→ ThomasHuang:ATL專案範本中沒有這兩個函式 10/08 11:52
→ chengcti:非標準 in-process server method. 內部用來避免二次進入 10/08 14:19
→ chengcti:他自己內部的method,怕兩次呼叫 DLL 會有問題. 10/08 14:19
→ ThomasHuang:想再請教一下 我開新的ATL專案 加入一個ATL Simple 10/08 16:09
→ ThomasHuang:Object 但是並沒有地方可以設定Clsaa繼承的介面 10/08 16:09
→ ThomasHuang:所以在ATL專案要新增一個Object並繼承特定介面 10/08 16:10
→ ThomasHuang:要在哪裡設定呢 10/08 16:10