我想快速測試ocx。如何在控制檯應用程序中刪除該ocx。我在CodeProject中找到了一些教程,但並不完整。在控制檯應用程序中使用ocx
3
A
回答
2
當然,這很容易。這裏有一個有趣的應用程序,我扔在一起。我假設你有Visual C++。
保存到TEST.CPP和編譯:cl.exe時/ EHSC TEST.CPP
當您OCX測試你需要任何的#import類型庫,並使用它的CLSID(或只是硬編碼的CLSID)在CoCreateInstance調用中。使用#import還可以幫助定義您可能需要的任何自定義界面。
#include "windows.h" #include "shobjidl.h" #include "atlbase.h" // // compile with: cl /EHsc test.cpp // // A fun little program to demonstrate creating an OCX. // (CLSID_TaskbarList in this case) // BOOL CALLBACK RemoveFromTaskbarProc(HWND hwnd, LPARAM lParam) { ITaskbarList* ptbl = (ITaskbarList*)lParam; ptbl->DeleteTab(hwnd); return TRUE; } void HideTaskWindows(ITaskbarList* ptbl) { EnumWindows(RemoveFromTaskbarProc, (LPARAM) ptbl); } // ============ BOOL CALLBACK AddToTaskbarProc(HWND hwnd, LPARAM lParam) { ITaskbarList* ptbl = (ITaskbarList*)lParam; ptbl->AddTab(hwnd); return TRUE;// continue enumerating } void ShowTaskWindows(ITaskbarList* ptbl) { if (!EnumWindows(AddToTaskbarProc, (LPARAM) ptbl)) throw "Unable to enum windows in ShowTaskWindows"; } // ============ int main(int, char**) { CoInitialize(0); try { CComPtr<IUnknown> pUnk; if (FAILED(CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER|CLSCTX_LOCAL_SERVER, IID_IUnknown, (void**) &pUnk))) throw "Unabled to create CLSID_TaskbarList"; // Do something with the object... CComQIPtr<ITaskbarList> ptbl = pUnk; if (ptbl) ptbl->HrInit(); HideTaskWindows(ptbl); MessageBox(GetDesktopWindow(), _T("Check out the task bar!"), _T("StackOverflow FTW"), MB_OK); ShowTaskWindows(ptbl); } catch(TCHAR * msg) { MessageBox(GetDesktopWindow(), msg, _T("Error"), MB_OK); } CoUninitialize(); return 0; }
3
是不是一個ActiveX用戶控件的OCX? (你放在表單上供用戶進行交互的東西)?
我知道測試COM/ActiveX的最簡單方法就是使用excel。 (是的,我知道這聽起來很愚蠢,多多包涵)
- 運行Excel,創建一個新的文件,如果它沒有這樣做對你
- 按
Alt+F11
啓動Visual Basic編輯器(如果您有Excel 2007年它是在「開發者」功能區選項卡的事情
現在你在快樂的Visual Basic土地是......
- 從
Tools
菜單中,選擇References
- 從列表中選擇您的OCX/COM對象,或者點擊
Browse...
查找未註冊COM的文件 - 如果您的OCX已經註冊,您可以跳過此步驟。 - 從
Insert
菜單中,選擇UserForm
- 在浮動
Toolbox
窗口中,右鍵單擊並選擇Additional Controls
- 在列表中找到您的OCX和打勾
- 然後,您可以從工具箱拖動OCX到用戶表單
- 從
Run
菜單運行它。 測試你的OCX並玩弄它。
保存EXCEL文件,所以你不必每次重複這些步驟。
1
@orion多數民衆贊成如此酷。從來沒有這樣想過。
那麼@jschroedl多數民衆贊成在確實很有趣。
在控制檯應用程序中測試activex很有趣。但我認爲它的價值不在試圖走這條道路。您可以通過@jschroedl解釋的方式調用方法或設置屬性,也可以通過Invoke函數調用IDIspatch對象。
第一步是GetIDsByName並通過Invoke調用該函數,並且該函數的參數應該是Invoke形式參數列表中的VARIANTS數組。
一切都很好,花花公子。但一旦你從那裏開始下坡活動。 Windows應用程序需要消息泵才能觸發事件。在控制檯上你沒有一個。我沿着這條路走下去,爲事件實現EventNotifier,就像使用經典C++方式實現CallBack接口一樣。但是這些事件並沒有達到你的實現接口。
我很確定這不能在控制檯應用程序上完成。但我真的希望有人會在控制檯應用程序中採用不同的事件
相關問題
- 1. 在C#.NET控制檯應用程序中使用OCX控件
- 2. 使用Microsoft.AspNet.Mvc控制檯應用程序
- 3. TIdTCPServer.OnExecute在控制檯應用程序中
- 4. 在Win32應用程序中使用Shockwave Flash作爲OCX控件
- 5. 從其他控制檯應用程序運行控制檯應用程序
- 6. 從控制檯應用程序啓動控制檯應用程序
- 7. C#應用程序在控制檯中使用另一個應用程序
- 8. 在控制檯應用程序中使用Web應用程序方法
- 9. 控制檯應用程序中的HttpContext
- 10. 控制檯應用程序中的System.Drawing.Color
- 11. C++應用程序中的控制檯
- 12. 控制檯應用程序中的iframe
- 13. C#控制檯應用程序中斷?
- 14. 控制檯應用程序中的WriteableBitmapEx?
- 15. 控制檯應用程序中的ConfigurationErrorsException
- 16. HttpUtility.UrlEncode在控制檯應用程序
- 17. 無法在控制檯應用程序
- 18. C# - 在控制檯應用程序
- 19. 在Windows控制檯應用程序
- 20. appsettings.json在.netCore控制檯應用程序
- 21. 如何在控制檯應用程序
- 22. 在C#控制檯應用程序
- 23. 在控制檯應用程序
- 24. 如何在控制檯應用程序
- 25. 在控制檯應用程序
- 26. 在Delphi控制檯應用程序
- 27. QFileDialog :: getOpenFileName在控制檯應用程序
- 28. 包含在GTK應用程序控制臺應用程序
- 29. 如何在控制檯應用程序中使用vcl組件?
- 30. 在.NET 4.5.2控制檯應用程序中使用.NET Core庫
儘管存在無窗口的OCX模塊,但此方法不起作用。 – 2014-02-04 18:06:49