Extremely Rough Overview COM Extremely Rough Overview CD5250 Daniel Flemström MDH/IDT
Traditional VS COM Apps COM Application 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++ ! CD5250 Daniel Flemström MDH/IDT
COM Component Object Model IUnknown IDL – Interface Definition Language Registrera din komponent Ckula = KULA.DLL class Ckula { HRESULT Do(); HRESULT Yl(); ... }; HRESULT Ckula::Do() { } HRESULT Ckula::Yl() { . Win32 Registry Kula.h Kula.cpp cFact.cpp Kula.idl KULA.DLL CD5250 Daniel Flemström MDH/IDT
Använda COM WIN32 Registry COM bibliotek 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. CD5250 Daniel Flemström MDH/IDT
IUnknown QueryInterface(IID& iid,void** ppIface); Addref/ Release Istället För dynamic_cast Interface ID istället för typ Addref/ Release IUnknown Kalle IDraw IKalle IUnknown ... IBoll OlleBoll IBoll ... CD5250 Daniel Flemström MDH/IDT
Skapa en instans av ett COM objekt #include ”BOLL.H” IBoll* pBoll; pBoll = new CBoll(); pBoll->Do(); #import ”C:\blabla\BOLL.DLL” CComPtr<IBoll> pBoll; pBoll.CoCreateInstance(L”myProj.Boll”); HRESULT hr; hr = pBoll->Do(); if(SUCCEEDED(hr)) . . . CComQIPtr<IDraw> pD(pBoll); // Gör QueryInterface hr = pD->Erase(); CD5250 Daniel Flemström MDH/IDT
Skapa ett ActiveX Projekt ATL COM Appwizard CD5250 Daniel Flemström MDH/IDT
Vad har hänt KULA.DLL CD5250 Daniel Flemström MDH/IDT
”Skriva” ett COM objekt Antal Färdiga Skelett Finns: Insert | New ATL Object: CD5250 Daniel Flemström MDH/IDT
ATL Object Wizard CD5250 Daniel Flemström MDH/IDT
Vad Hände ? CD5250 Daniel Flemström MDH/IDT
Vad Hände? CD5250 Daniel Flemström MDH/IDT
Vad Hände ? QueryInterface CD5250 Daniel Flemström MDH/IDT
Vad Hände ? IDL beskrivning av vår klass CD5250 Daniel Flemström MDH/IDT
Lägga Till Events Högermus | Events 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; } CD5250 Daniel Flemström MDH/IDT
Lägga till Metoder och Properties Högerklicka på interface symbolen CD5250 Daniel Flemström MDH/IDT
ADD Method CD5250 Daniel Flemström MDH/IDT
ADD Property CD5250 Daniel Flemström MDH/IDT
Vad Hände? CD5250 Daniel Flemström MDH/IDT
Använda ATLControls.h Hitta ATLControls.h #include <ATLControls.h> using namespace ATLControls; .. CListBox list(GetDlgItem(IDC_LIST1)); list.ResetContent(); List.AddString(“Kalle”); CComBSTR m_str; GetDlgItemText(IDC_EDIT1, strDayLeap.m_str); CD5250 Daniel Flemström MDH/IDT
Vad mer bör man kunna? CComPtr<> CComQIPtr<> CComVariant CComBSTR USING_CONVERSION W2CT och så vidare CD5250 Daniel Flemström MDH/IDT