Chciałbym opracować formant ActiveX i nie posiadam Visual Studio Zastanawiam się, czy mogę używać edycji ekspresowej VisualC++ na własną rękę, czy też potrzebuję SDK platformy Windows?Tworzenie formantów ActiveX
Odpowiedz
Do napisania formantu Active X nie jest potrzebne narzędzie Visual Studio. Formant Active X to po prostu obiekt COM, który jest zarejestrowany w określony sposób, który implementuje IUnknown i IObjectSafety.
Nie trzeba tworzyć projektu Visual Studio Active X. Możesz po prostu utworzyć zwykłą bibliotekę DLL, dodać odpowiedni manifest i przenieść go za pomocą narzędzi CAB SDK.
Nie musisz używać ATL, aby napisać kontrolkę Active X. W rzeczywistości prawdopodobnie lepiej nie używać go, dopóki nie zrozumiesz, jak działają interfejsy OLE w modelu rozszerzalności IE.
Tak, wszystko będzie dobrze z Visual Studio Express.
EDIT:
- Powinieneś zacząć Introduction to Active X Controls.
- Oto CAB SDK.
- Powinieneś mieć żadnego problemu ze znalezieniem przykładów podstawowych kontrolek ActiveX wyszukiwarką Google, itp
Oto manifest próbki, zwany YOURCONTROL.inf. Oczywiście wymień YOURCONTROL na cokolwiek zwą facetem i wygeneruj własny GUID i numery wersji. To jest minimalny manifest, którego będziesz potrzebować.
[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
Musisz standardowego pliku .def w projekcie z listą wymaganych funkcji eksportowanych do COM i samodzielnej rejestracji. DllGetClassObject jest miejscem, w którym COM wywoła cię, aby uzyskać fabrykę klas dla obiektu COM. RegisterServer i UnregisterServer to miejsce, w którym powinieneś zapisać swój początkowy stan w rejestrze (np. Rejestrację obiektu COM itp.).
EXPORTS
DllCanUnloadNow PRIVATE
DllGetClassObject PRIVATE
DllRegisterServer PRIVATE
DllUnregisterServer PRIVATE
Musisz plik IDL też, więc można zdefiniować dispinterface Twojego obiektu COM, tak to można nazwać od scenariusza, a więc można go odpalić zdarzenia JavaScript.Coś takiego:
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;
}
}
I wreszcie, twój punkt wejścia DLL powinna wyglądać mniej więcej tak:
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;
}
Ten Microsoft Support post od 2006 by wskazuje, że można użyć wydanie VC++ Express, za opracowanie formantów ActiveX:
DOTYCZY
Microsoft Active Template Library 3.0 na następujących platformach:
Microsoft Visual C++ 6.0 Enterprise Edition
Microsoft Visual C++ 6.0 Professional Edition
Microsoft Visual C++, 32-bitowa edycja edukacyjna 6.0
Microsoft Visual C++ 2005 Express Edition
Microsoft Visual C++ .NET 2003 Standard Edition
Microsoft Visual C++ .NET 2002 Standard Edition
Minęło trochę czasu odkąd opracowana z wykorzystaniem ActiveX, ale nie pamiętam konieczność zainstalowania zestawu SDK platformy Windows.
Nie sądzę, że strona jest poprawna. Strona wskazuje, że próbka używa ATL i jest to jedna z rzeczy, których brakuje w edycji Visual C++ Express. – Matt
- 1. Liczba dynamicznych elementów sterujących ASP.NET (tworzenie formantów w trakcie pracy)
- 2. Activex z aplikacji java?
- 3. Formant ActiveX bez formularza
- 4. Dodaj formantów dynamicznie FlowLayoutPanel
- 5. Dodawanie formantów JavaFX2 dynamicznie
- 6. Dokumentacja dla formantów three.js?
- 7. Kontrolka activex na tej stronie może być niebezpieczna.
- 8. Umieść div na obiekcie activeX
- 9. Excel 2010 formanty ActiveX bez dłuższej pracy po aktualizacji Windows
- 10. Znajdowanie WSZYSTKICH formantów podrzędnych WPF
- 11. Auto rozmiar formantów w winform
- 12. MVVM i dynamiczna generacja formantów
- 13. Hostowanie formantów WPF w WinFormach
- 14. modalne okno dialogowe nad kontrolką Activex
- 15. Zdarzenie niestandardowe ActiveX nie działa na IE11
- 16. sposób automatycznej aktualizacji ActiveX na komputerze klienta
- 17. Subskrybowanie zdarzeń myszy wszystkich formantów w formularzu
- 18. Automatyczne zmienianie rozmiaru formantów Windows Forms
- 19. Ponowne użycie formantów i widgetów Backbone.js
- 20. Zmiana koloru tekstu dla formantów QML
- 21. Jak ustawić szerokość formantów w Xamarin.Forms
- 22. Kolor obramowania formantów za pomocą VisualStyles
- 23. Odtwarzanie dźwięku za pomocą formantów w iOS
- 24. Kierowanie kluczowych zdarzeń do innych formantów
- 25. Wysyłanie stanu z formantów do architektury ramowej
- 26. Udostępnianie procedury obsługi zdarzeń dla wielu formantów
- 27. Jak uzyskać rozmiar pliku od strony klienta bez użycia ActiveX w javascript?
- 28. Jak mogę przeglądać klasy i metody biblioteki DLL ActiveX?
- 29. Mieszkanie z pojedynczym gwintem - nie można utworzyć instancji kontrolki ActiveX
- 30. Błąd wykonania "429": Składnik ActiveX nie może utworzyć obiektu VBA
nie mam zainstalowany edycja VC++ Express. Jakie opcje daje ci wybór "Plik> Nowy> Projekt ..."? – ChrisF
Bardzo mało. Biblioteka klas, aplikacja konsoli CLR, pusty projekt CLR, aplikacja Windows Forms, aplikacja Win32 Console, projekt Win32, pusty projekt. Myślę, że chcę po prostu napisać aplikację DLL. – Matt