Je souhaite tester rapidement un ocx. Comment est-ce que je laisse tomber cette ocx dans une application de console. J'ai trouvé quelques tutoriels dans CodeProject et mais sont incomplets.Utilisation d'un ocx dans une application console
Répondre
Bien sûr, c'est plutôt facile. Voici une application amusante que j'ai lancée ensemble. Je suppose que vous avez Visual C++.
Enregistrer pour TEST.CPP et compiler: cl.exe/EHsc test.cpp
Pour tester votre OCX vous devrez soit #import la typelib et l'utiliser est CLSID (ou tout simplement coder en dur CLSID) dans l'appel CoCreateInstance. L'utilisation de #import aidera également à définir les interfaces personnalisées dont vous pourriez avoir besoin.
#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; }
Un OCX n'est-il pas un contrôle utilisateur ActiveX? (quelque chose que vous mettez sur un formulaire pour l'utilisateur d'interagir avec)?
Le moyen le plus simple que je connaisse pour tester COM/ActiveX est d'utiliser Excel. (Oui, je sais que cela semble stupide, ours avec moi)
- Run Excel, créez un nouveau fichier si elle n'a pas fait cela pour vous
- Appuyez sur
Alt+F11
pour lancer l'éditeur Visual Basic (si vous avez Excel 2007, il est sur l'onglet ruban « développeur » chose
maintenant que vous êtes en terrain de base heureux visuel ...
- dans le menu
Tools
, sélectionnezReferences
- Sélectionnez votre objet OCX/COM dans la liste ou cliquez sur
Browse...
pour rechercher le fichier s'il n'est pas enregistré auprès de COM - Vous pouvez ignorer cette étape si votre OCX est déjà enregistré. - Dans le menu
Insert
, sélectionnezUserForm
- Dans la fenêtre
Toolbox
flottante, faites un clic droit et sélectionnezAdditional Controls
- Trouver votre OCX dans la liste et les tiques qu'il
- Vous pouvez ensuite faire glisser votre OCX de la boîte à outils sur la userform
- Dans le menu
Run
, exécutez-le. Testez votre OCX et jouez avec. ENREGISTREZ LE FICHIER EXCEL afin de ne pas avoir à répéter ces étapes à chaque fois.
@orion est tellement cool. Je n'y ai jamais pensé de cette façon.
Eh bien @jschroedl c'était vraiment amusant.
Tester un ActiveX dans une application de console est amusant. Mais je pense que cela vaut la peine de ne pas essayer cette voie. Vous pouvez appeler les méthodes ou définir et obtenir les propriétés soit de la façon dont @jschroedl a été expliqué, soit vous pouvez appeler l'objet IDIspatch via la fonction Invoke.
La première étape est de GetIDsByName et appelez la fonction via Invoke et les paramètres de la fonction doivent être un tableau de VARIANTS dans la liste des paramètres formels Invoke.
Tout va bien et dandy. Mais une fois que vous arrivez à des événements sa descente à partir de là. L'application Windows nécessite une pompe de message pour déclencher des événements. Sur une console, vous n'en avez pas. Je suis allé sur le chemin pour implémenter un EventNotifier pour les événements tout comme vous implémentez une interface CallBack en mode C++ classique. Mais les événements ne parviennent pas à votre interface implémentée. Je suis assez sûr que cela ne peut pas être fait sur une application de la console.
Mais j'espère vraiment que quelqu'un aura une vision différente des événements dans une application de console.
- 1. Comment implémenter MVP dans une application console?
- 2. ConfigurationErrorsException dans une application de console
- 3. Minuterie fiable dans une application console
- 4. Application Win32 Console vs application CLR Console
- 5. Comment intégrer une mini-console dans une application Java?
- 6. Utilisation de Console.WriteLine dans une application Windows Forms
- 7. Utilisation de WebParts dans une application MVC
- 8. application Console question
- 9. Comment gérer les événements EndProcess dans une application Vista Console?
- 10. Comment gérer Ctrl + C dans une application console Delphi?
- 11. Attributs OCX
- 12. Comment ajouter une minuterie à une application de console C#
- 13. Comment puis-je ouvrir une nouvelle fenêtre de console pour une application de console Visual C++?
- 14. Utilisation de JavaHelp avec une application Web
- 15. Utilisation de VisualVM avec une application JDK1.4?
- 16. Console Application - Impossible d'intercepter une exception non gérée
- 17. Interagir avec une application de console Windows via Python
- 18. Modification des paramètres par défaut pour une application de console
- 19. Exécuter une application de console à partir d'une fenêtre Formulaire
- 20. Comment faire pour exécuter une application de console C# avec la console masquée
- 21. Comment convertir une application de console .NET en une application WinForms ou WPF
- 22. Utilisation d'une bibliothèque C++ dans une application Objective-C?
- 23. Stockage et utilisation de l'état dans une application GUI
- 24. Utilisation du plug-in IDE dans une application Eclipse RCP?
- 25. Utilisation de Windows Workflow dans une application ASP.NET AJAX
- 26. Utilisation du modèle Model-View-Presenter dans une application MFC
- 27. Utilisation de WCF dans une application ASP.Net et meilleures pratiques
- 28. Utilisation de composants flex dans une application papervision3d
- 29. Utilisation de Spring AOP dans une application JSF
- 30. Utilisation de DLL Windows dans une application portable
Il existe cependant des modules OCX sans fenêtre pour lesquels cette méthode ne fonctionne pas. –