Je voudrais développer un contrôle ActiveX et comme je ne possède pas de studio visuel, je me demande si je peux utiliser l'édition expresse de VisualC++ ou ai-je besoin du SDK Windows Platform?Développement de contrôles ActiveX
Répondre
Vous n'avez pas besoin de Visual Studio pour écrire un contrôle Active X. Un contrôle Active X est simplement un objet COM enregistré d'une manière spécifique qui implémente IUnknown et IObjectSafety.
Vous n'avez pas besoin de créer un projet Visual Studio Active X. Vous pouvez simplement créer une DLL normale, ajouter le manifeste approprié et l'utiliser en utilisant les outils CAB SDK.
Vous n'avez pas besoin d'utiliser ATL pour écrire un contrôle Active X. En fait, il est probablement préférable de ne pas l'utiliser tant que vous n'avez pas compris le fonctionnement des interfaces OLE dans le modèle d'extensibilité IE.
Alors oui, vous serez très bien avec Visual Studio Express.
EDIT:
- Vous devriez commencer par Introduction to Active X Controls. Voici le CAB SDK.
- Vous devriez avoir aucun problème à trouver des exemples pour les contrôles ActiveX de base en effectuant une recherche google, etc.
est ici un manifeste de l'échantillon, appelé YOURCONTROL.inf. Bien évidemment, remplacez YOURCONTROL par ce que vous appelez votre type, et générez vos propres GUID et numéros de version. C'est le manifeste minimum dont vous aurez besoin.
[version]
signature="$CHICAGO$"
AdvancedINF=2.0
[Add.Code]
YOURCONTROL.dll=YOURCONTROL.dll
[YOURCONTROL.dll]
file-win32-x86=thiscab
clsid={11111111-2222-3333-4444-555555555555}
FileVersion=1,2,3,4567
RegisterServer=yes
Vous aurez besoin d'un fichier standard .def dans votre projet qui énumère les fonctions exportées nécessaires pour COM et auto-inscription. DllGetClassObject est où COM vous appellera pour obtenir la fabrique de classe pour votre objet COM. RegisterServer et UnregisterServer est où vous devez écrire votre état initial dans le registre (par exemple votre enregistrement d'objet COM, etc).
EXPORTS
DllCanUnloadNow PRIVATE
DllGetClassObject PRIVATE
DllRegisterServer PRIVATE
DllUnregisterServer PRIVATE
Vous aurez besoin d'un fichier IDL aussi, de sorte que vous pouvez définir votre dispinterface de l'objet COM de sorte qu'il peut être appelé à partir du script, et il peut déclencher des événements à Javascript.Quelque chose comme ceci:
import "oaidl.idl";
import "ocidl.idl";
#include "dispids.h" // <-- define your DISPIDs here
[
uuid(<<generate your own guid here>>),
version(1.0),
]
library YOURCONTROLLIBRARY
{
[
uuid(<<generate your own guid here>>),
hidden
]
dispinterface DYOURCONTROLEvents
{
properties:
methods:
// Add outgoing events here.
[id(DISPID_SOME_EVENT)] void SomeEvent();
}
[
dual,
uuid(<<generate your own guid here>>)
]
interface IYOURCONTROL : IDispatch
{
// Add methods and properties here.
[id(DISPID_SOMEMETHOD)] HRESULT SomeMethod([in] BSTR bstrFoo);
}
[
uuid(<<generate your own guid here>>)
]
coclass YOURCONTROLCtl
{
[default] interface IYOURCONTROL;
[source, default] dispinterface DYOURCONTROLEvents;
}
}
Et, enfin, votre point d'entrée de DLL devrait ressembler à ceci:
HINSTANCE g_hInstance;
LONG g_nDllRefs;
extern "C"
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) {
switch (dwReason) {
case DLL_PROCESS_ATTACH:
g_hInstance = hInstance;
g_nDllRefs = 0;
break;
case DLL_PROCESS_DETACH:
break;
}
return true;
}
// Call this whenever you create your object to keep your DLL loaded.
void DllAddRef() {
InterlockedIncrement(&g_nDllRefs);
}
// Call this when your object is destroyed.
void DllRelease() {
InterlockedDecrement(&g_nDllRefs);
}
STDAPI DllCanUnloadNow() {
return (g_nDllRefs == 0 ? S_OK : S_FALSE);
}
// This is where you create your class factory. See the IClassFactory documentation on msdn.
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv) {
HRESULT hr;
if (rclsid == CLSID_YOUROBJECTCtl) {
CYOUROBJECTFactory *pYOUROBJECTFactory = new CYOUROBJECTFactory;
if (pYOUROBJECTFactory == NULL) {
hr = E_OUTOFMEMORY;
} else {
hr = pYOUROBJECTFactory ->QueryInterface(riid, ppv);
}
} else {
hr = CLASS_E_CLASSNOTAVAILABLE;
}
return hr;
}
STDAPI DllRegisterServer() {
// Write your registry keys for registering your ActiveX COM Object here.
return S_OK;
}
STDAPI DllUnregisterServer() {
// Delete your registry keys here.
return S_OK;
}
Cette Microsoft Support post de 2006 serait indique que vous pouvez utiliser l'édition VC++ Express pour le développement de contrôles ActiveX:
APPLIQUE À
Microsoft ActiveX Template Library 3.0, lorsqu'il est utilisé avec:
Microsoft Visual C++ 6.0 Édition Entreprise
Microsoft Visual C++ 6.0 Édition professionnelle
Microsoft Visual C++, 32 bits Édition apprentissage 6.0
Microsoft Visual C++ 2005 Express Edition
Microsoft Visual C++ .NET 2003 Standard Edition
Microsoft Visual C++ .NET 2002 Standard Edition
Il a été un moment que j'ai développé en utilisant ActiveX, mais je ne me souviens pas avoir à installer le Kit de développement Windows Platform SDK.
Je ne pense pas que la page est correcte. La page indique que l'exemple utilise l'ATL et c'est l'un des éléments manquants de l'édition Visual C++ Express. – Matt
- 1. Alternative aux contrôles ActiveX
- 2. Primer sur les contrôles ActiveX
- 3. Les contrôles ActiveX importés sont non visuels
- 4. est-ce possible avec les contrôles ActiveX?
- 5. Enregistrement non-administrateur des contrôles ActiveX
- 6. Contrôles ActiveX avec les anciennes versions Delphi
- 7. Comment lister tous les contrôles ActiveX?
- 8. Comment activer les contrôles ActiveX dans firefox?
- 9. VB6 + classic asp: développement du composant activeX
- 10. contrôles asp.net pour le développement de l'iPhone
- 11. Hébergement de contrôles ActiveX dans le .NET Compact Framework 2.0
- 12. Automatisation de l'application VB6 avec des contrôles ActiveX
- 13. Détection de l'application bloqué avec des contrôles ActiveX dans .Net
- 14. Utilisation de contrôles ActiveX (COM) graphiques dans le projet WinForms
- 15. Contrôles ActiveX non réels dans les projets Realbasic
- 16. Contrôles ActiveX VB6 dans une application TCL/Tk
- 17. Créer un composant COM et des contrôles ActiveX
- 18. Hébergement des contrôles ActiveX sur un cadre Java AWT?
- 19. Impossible d'obtenir le handle de la fenêtre, les contrôles ActiveX sans fenêtre ne sont pas supportés?
- 20. Invite Suggestions de contrôles tiers pour le développement d'asp.net
- 21. Comment automatiser l'interface de contrôle activex
- 22. Je n'ai pas pu instancier les contrôles ActiveX Réinstaller ou enregistrer les contrôles et réessayer Message lors de l'affichage Dialog
- 23. Comment trouver des contrôles ActiveX à partir de formulaires MS Access DB à l'aide de vb.net
- 24. Outil pour les capacités de contrôle ActiveX
- 25. Activex à partir de l'application Java?
- 26. Appels croisés Winforms/ActiveX
- 27. Debug ActiveX
- 28. Communication ActiveX
- 29. Comment utiliser WinForms/WPF comme contrôle ActiveX?
- 30. ASP.NET Impossible de créer le composant ActiveX
Je n'ai pas l'édition VC++ Express est installé. Quelles options vous donne-t-il lorsque vous sélectionnez "Fichier> Nouveau> Projet ..."? – ChrisF
Très peu. Bibliothèque de classes, application console CLR, projet vide CLR, application Windows Forms, application console Win32, projet Win32, projet vide. Je pense que je veux juste écrire une application DLL. – Matt