Sid 1 CD5250 Daniel Flemström MDH/IDT COM Extremely Rough Overview
Sid 2 CD5250 Daniel Flemström MDH/IDT Traditional VS COM Apps Monolithic Application COM Definierar hur pusselbitarna skall se ut. Resultatet blir språkoberoende pusselbitar(COM) objekt. COM komponent skriven i VB kan användas ifrån C++ ! COM Application
Sid 3 CD5250 Daniel Flemström MDH/IDT COM Component Object Model IUnknown IDL – Interface Definition Language Registrera din komponent HRESULT Ckula::Do() { } HRESULT Ckula::Yl() {. } Kula.cpp class Ckula { HRESULT Do(); HRESULT Yl();... }; Kula.hKula.idl Ckula = KULA.DLL Win32 Registry KULA.DLL cFact.cpp
Sid 4 CD5250 Daniel Flemström MDH/IDT Använda COM WIN32 Registry –En databas för att mappa klassID mot DLL tex. –Innehåller information om ID och namn på klasser och interface. COM bibliotek –Slår upp klassid och vet hur man skapar objekt av aktuell klass(oberoende vilket programspråk objektet är skrivet i). CoCreateInstance(klassID) istället för new ATL –En samling templates för att underlätta utveckling och användning av COM komponenter.
Sid 5 CD5250 Daniel Flemström MDH/IDT IUnknown QueryInterface(IID& iid,void** ppIface); Istället För dynamic_cast Interface ID istället för typ Addref/ Release IDraw IKalle Kalle... IUnknown IBoll OlleBoll... IUnknown IBoll
Sid 6 CD5250 Daniel Flemström MDH/IDT Skapa en instans av ett COM objekt #import ”C:\blabla\BOLL.DLL” CComPtr pBoll; pBoll.CoCreateInstance(L”myProj.Boll”); HRESULT hr; hr = pBoll->Do(); if(SUCCEEDED(hr))... CComQIPtr pD(pBoll); // Gör QueryInterface hr = pD->Erase(); if(SUCCEEDED(hr))... #include ”BOLL.H” IBoll* pBoll; pBoll = new CBoll(); pBoll->Do();
Sid 7 CD5250 Daniel Flemström MDH/IDT Skapa ett ActiveX Projekt ATL COM Appwizard
Sid 8 CD5250 Daniel Flemström MDH/IDT Vad har hänt KULA.DLL
Sid 9 CD5250 Daniel Flemström MDH/IDT ”Skriva” ett COM objekt Antal Färdiga Skelett Finns: Insert | New ATL Object:
Sid 10 CD5250 Daniel Flemström MDH/IDT ATL Object Wizard
Sid 11 CD5250 Daniel Flemström MDH/IDT Vad Hände ?
Sid 12 CD5250 Daniel Flemström MDH/IDT Vad Hände?
Sid 13 CD5250 Daniel Flemström MDH/IDT Vad Hände ? QueryInterface
Sid 14 CD5250 Daniel Flemström MDH/IDT Vad Hände ? IDL beskrivning av vår klass
Sid 15 CD5250 Daniel Flemström MDH/IDT Lägga Till Events Högermus | Events
Sid 16 CD5250 Daniel Flemström MDH/IDT Event Handler LRESULT OnClickedButton1(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled) { // TODO : Add Code for control notification handler. return 0; }
Sid 17 CD5250 Daniel Flemström MDH/IDT Lägga till Metoder och Properties Högerklicka på interface symbolen
Sid 18 CD5250 Daniel Flemström MDH/IDT ADD Method
Sid 19 CD5250 Daniel Flemström MDH/IDT ADD Property
Sid 20 CD5250 Daniel Flemström MDH/IDT Vad Hände?
Sid 21 CD5250 Daniel Flemström MDH/IDT Använda ATLControls.h Hitta ATLControls.h #include using namespace ATLControls;.. CListBox list(GetDlgItem(IDC_LIST1)); list.ResetContent(); List.AddString(“Kalle”); CComBSTR m_str; GetDlgItemText(IDC_EDIT1, strDayLeap.m_str);
Sid 22 CD5250 Daniel Flemström MDH/IDT Vad mer bör man kunna? CComPtr<> CComQIPtr<> CComVariant CComBSTR USING_CONVERSION W2CT och så vidare