看板 C_and_CPP 關於我們 聯絡資訊
天下第一門派「元劍門」 主要由無數個「類級強者」和他們的弟子「特級菁英」組成。 類級強者:掌握多種神通,專心修煉不問俗事。 特級菁英:僅能使用一門神通,為類級強者的真傳弟子,簡稱「英特」。 元劍門對外承接任務,僅限「特級菁英」接案。雇主需自行挑選 "能力合適" 的英特。 === 舉例來說,欲求築基丹,則準備功夫如下: 一、打聽哪位「類級強者」身含煉藥神通 二、打聽其弟子「英 特」中,會煉藥的是哪一位 三、打聽師父與徒弟的身分證字號 (避免找到同名同姓的無辜路人) 真實案例: 英特名稱 *ptr = NULL; CoCreateInstance(類級_身分證字號, NULL, CLSCTX_ALL, 英特_身分證字號, (void**) &ptr); ptr->動作名稱(); // 一個口令一個動作 || || \ / \/ CoInitialize(NULL); /** 召喚步驚雲分神至 ptr 內 */ 步驚雲 *ptr = NULL; CoCreateInstance(id_for_雄霸, NULL, CLSCTX_ALL, id_for_步驚雲, (void**) &ptr); ptr->殃雲天降(); ptr->撕天排雲(); ptr->Release(); // 步驚雲你好,步驚雲再見。 CoUninitialize(); // 洗洗睡 === // 範例:印出目前桌布的檔案位置 // compile with: cl.exe xxx.cpp #include <atlbase.h> // for COM; VC 專業版肯定有此物,免費版可能沒辦法 #include <WinInet.h> // for IActiveDesktop #include <Shlobj.h> // for IActiveDesktop int main() { CoInitialize(NULL); IActiveDesktop *ptr = NULL; CoCreateInstance(CLSID_ActiveDesktop, NULL, CLSCTX_ALL, IID_IActiveDesktop, (void**) &ptr); wchar_t str[128]; ptr->GetWallpaper(str, 128, NULL); MessageBoxW(NULL, str, L"", MB_OK); ptr->Release(); CoUninitialize(); // 洗洗睡 return 0; } === 枯一力密法 三分歸元氣,據文獻記載,乃雄霸絕招, 納拳掌腿三絕 (天霜拳、排云掌、風神腿) 於一體。 換言之,即便像下面這樣召喚雄霸三位真傳弟子的分神: CoCreateInstance(CLSID_雄霸, NULL, CLSCTX_ALL, IID_秦霜, (void**) &p1); CoCreateInstance(CLSID_雄霸, NULL, CLSCTX_ALL, IID_步驚雲, (void**) &p2); CoCreateInstance(CLSID_雄霸, NULL, CLSCTX_ALL, IID_聶風, (void**) &p3); 那也只能產生量變,無法質變出「三分歸元氣」來。 唯有「英特」親自發動「枯一力」密法,將同師承的英特喚來一起出手才能成功。 當然找不同「類級強者」的英特是無效的。範例如下: CoInitialize(NULL); 秦霜 *p1 = NULL; 步驚雲 *p2 = NULL; 聶風 *p3 = NULL; /** 召喚秦霜分神 */ CoCreateInstance(CLSID_雄霸, NULL, CLSCTX_ALL, IID_秦霜, (void**) &p1); /** 秦霜發動「枯一力」特殊召換其他英特 */ p1->QueryInterface(IID_步驚雲, (void**) &p2); p1->QueryInterface(IID_聶風, (void**) &p3); /** 三分歸元氣 */ p1->天霜拳(); p2->排云掌(); p3->風神腿(); /** 再見 Bye Bye 有閒再來 */ p1->Release(); p2->Release(); p3->Release(); CoUninitialize(); === // 範例:在硬碟上,對 A 檔案新增名為 B 的捷徑 // compile with: cl.exe xox.cpp /** 手動開啟 UNICODE 字串偏好 */ #define UNICODE #define _UNICODE #include <atlbase.h> // for COM #include <shlobj.h> // for IShellLink & IPersistFile int main() { CoInitialize(NULL); /** 召喚英特 */ IShellLink *p1 = NULL; CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_ALL, IID_IShellLink, (void**) &p1); /** 讓 IShellLink 英特,變身成虛擬的捷徑連結物件, 並與硬碟上的檔案 123.avi 綁定。 */ wchar_t buf[256] = L"D:\\Desktop\\123.avi"; p1->SetPath(buf); /** 枯一力,特殊召喚 IPersistFile 英特 */ IPersistFile *p2 = NULL; p1->QueryInterface(IID_IPersistFile, (void **) &p2); /** 合成 "硬碟存檔" 至前面的虛擬物件 */ p2->Save(L"D:\\Desktop\\movie.lnk", FALSE); // 副檔名需為 lnk p1->Release(); p2->Release(); CoUninitialize(); // 洗洗睡 return 0; } 補充: 文章代碼(AID): #1G9bMUDp (Programming) [ptt.cc] R: [問題] 關於 plug-in 設計模式 文章網址: http://www.ptt.cc/bbs/Programming/M.1344689566.A.373.html IShellLink::SetPath method http://msdn.microsoft.com/en-us/library/bb761052 IPersistFile::Save method http://msdn.microsoft.com/en-us/library/ms693701 Introduction to COM - What It Is and How to Use It. http://www.codeproject.com/Articles/633/Introduction-to-COM-What-It-Is-and-How-to-Use-It The Complete Idiot's Guide to Writing Shell Extensions - Index http://www.codeproject.com/Articles/830/The-Complete-Idiot-s-Guide-to-Writing-Shell-Extens Shell Explorer's Cookbook (xplorer2 作者) http://netez.com/2xExplorer/shellFAQ/shmain.html 身分證字號 元劍門人的身分證字號,只要就是一種叫 GUID 的東西。(.NET 也看得到) COM class 又叫 coclass 即類級強者,其字號,以 CLSID 當前綴 Interface 即英特,以 IID 當前綴 註冊 COM class 大多群居在 DLL 內,當 DLL 使用 regsvr32.exe 註冊後, 所有的 coclass 及各自旗下的 Interface 資訊就會登記進機碼內, 當然大多以身分證字號記載。 列舉目前電腦的 COM class 資訊 微軟 VC 有附 OLE-COM Object Viewer (x64) 軟體,可以透過 掃瞄機碼這類方式,列出電腦上的 COM 資訊。 有個工具叫 COMView,網址是:http://www.japheth.de/COMView.html 在 XP 可以跑,我現在用 Win7 X64 不能跑,不知道誰有辦法解決? 這套工具可以即時建立 COM class 的物件實體,比如跑一個影片播放器出來... 中文翻譯 元件物件模型吧? component 大陸叫組件, 台灣講元件 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 124.8.134.167
legendmtg:一進文章還以為走錯板.... 08/13 15:35
aecho:好強的武功啊 !!! 08/13 16:11
CP64:蝦貨wwwwwwwwwwwwww 08/13 17:18
MOONRAKER:贊 08/13 17:54
james732:先推再回家慢慢看 08/13 18:35
EdisonX:讚讚讚!!我好期待 p 大能發 plug-in 小範例 08/13 19:06
purpose:哪天有想法的話,再發文 08/13 20:54
POSIX:超有趣! 08/14 01:12
BlazarArc:推XDDDDDDDDDD 08/14 12:48
damody:推 有強者! 08/14 16:18