看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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