Grundkurs i com-objektsprogrammering via Visual J++
Förord
I den här kursen tänkte jag ta upp bakgrunden till com-objekt, grunderna i com-objekts programmering via Microsofts utvecklingsverktyg Visual J++, samt hur man kallar på objektet från VB och ASP. Ev. så kommer det senare att komma en kurs i com-objekts programmering via Sun’s Java, men det beror på mängden fritid jag får tillgång till.. Anyway.. Let’s get started.. (grundKurs.VisualJava.com objCourse = new grundKurs.VisualJava.com)Innehåll
»»
»
»
»
»
»
»
Bakgrund – Com-objekt
A long, long time ago, behind a computer far, far away, sat a guy namned Bill.. Well.. you know the story..Innan vi börjar koda så kanske det kan vara bra att veta VAD ett com-objekt är.. Vet du redan, och inte är intresserad av en liten historielektion så kan du skippa detta och gå till nästa rubrik.. (objCoure.moveNext();)
För inte så väldigt länge sen som den första meningen kan få oss att tro, så uppfanns Windows. Wow.. Sooo sexy.. Ett grafiskt användargränssnitt till datorn. Till windows började vissa företag göra program, och säkrade därför Microsofts, och deras operativsystem s(ja.. Dos.. Windows var på den tiden bara ett skal över Dos.), överlevnad. Man insåg snabbt att det var onödigt för alla programmerare att ”re-invent the wheel” varje gång de skulle visa en dialogruta, kolla hur många sekunder datorn varit igång, spela ljud på datorn, osv.. (som man alltså fick göra i Dos.. ) Därför (Ren gissning från min sida, men logiskt sett så verkar det vettigast) uppfann man DLL’er.. (Dynamicly Linked Libraries, eller Dynamiskt Länkade Bibliotek.) Dessa var i princip funktionsbibliotek. Här fanns olika funktioner som användes ofta runtom i Windows, så att man slapp sitta och koda varje funktion själv. Nu behövde man bara kalla på en funktion i biblioteket så löste sig alla problem.
Som programmerare så kunde man även hamna i situationen att man gjorde ett program i t.ex Vb, men behövde snabbheten hos C++ i vissa funktioner. Då kunde man göra en DLL i C++ som man sen kallade på från Vb. Tiderna förändrades.. Microsoft insåg att DOS var en uttjänt teknik, och lanserade sitt operativsystem Windows 95 som innehöll 32 bitars teknik för att till fullo kunna utnyttja den nya processorarkitekturen. (i386)
Man insåg att DLL tekniken var på väg ut, och med internet så kom även scriptingtekniken för nätet. Här kom Microsoft fram till att ”wow va bra det varit om vi kunnat använda samma princip till nätscript för att snabba upp dom.. Men.. Vi kan ju inte kalla på DLL’er från hemsidor. Hur ska vi lösa detta?” Microsoft gjorde det enda rätta.. Lanserade ASP (Active Server Pages), samt ett nytt sätt att kalla på funktions bibliotek. Tadaa.. Com-Objekt gjorde entré..
Till skillnad från DLL’er så sparas information om namnet på objektet(fil biblioteket), vilka funktioner det innehåller, vilka parametrar det tar och ger, vilka ingångar(eller Interfaces) som det har, osv, i windows register.
Tack vare detta så kan man lägga filbiblioteken precis var du vill. Det enda viktiga är att de är registrerade i systemregistret. Och här är vi idag.. Nästan överallt på nätet stöter vi på Com-objekt som ligger och surrar i bakgrunden hos hemsidor (Lunarstorm är ett prakexempel på detta). MEN.. Com-Objekt kan även användas från vanliga windows applikationer, vilket du snart ser om du fullföljer den här kursen..
Notera: Ett com-objekt har filändelsen .DLL, och inte .COM vilket man lätt tror.. ;-)
Ett-Två-Here we go!
Ok.. Så du landade här.. Då visste du alltså vad com-objekt var, eller så skippa du historielektionen efter 10 meningar, för inte kan det finnas någon som orkar läsa allt det där, bara för att förstå VARFÖR vi ska koda com-objekt? Men, nu ska vi inte ödsla tid.. Börja med att dra igång Visual J++.
I menyn så väljer du Visual J++ projects -> Components. Markera ’Com DLL’. Skriv sedan in projektnamnet i textrutan nedanför, och tryck på Öppna.

Därefter följer 2 dialogrutor som du trycker Yes, och OK på.
På högersidan av skärmen har du nu en ’Project Browser’.. Dvs en trädstruktur över ditt nuvarande projekt. Öppna upp trädstrukturen, och dubbelklicka på Class1.Java. Här får du upp litet fönster som innehåller koden för den här klassen.

I princip så har vi ett färdigt com-objekt nu, om än ett tomt sådant. Som jag skrev förut så är ett com-objekt ett funktionsbibliotek. Objektet som vi har är ett bibliotek, men har inga funktioner, så det är upp till hos att fylla det!
Värden
Stopp.. Stopp.. Stopp.. Glömmer vi inte en liten sak nu? Njae.. Egentligen inte, men för att vi ska få lite att leka med så är det lika bra att vi tar med detta också. Den kanske viktigaste skillnaden mellan ett com-objekt och en gammal DLL hörs nästan direkt i namnet. Com-o-b-j-e-k-t.. Det är alltså ett objekt. På samma sätt som en knapp på ett formulär är ett objekt.. Och oftast så kan man tilldela dessa objekt olika värden. En knapp i Vb har ju ett antal olika värden. T.ex Caption, name, height, width, för att bara nämna några. Vi kanske är intresserade av att ha några värden i vårt objekt som vi kan komma åt från alla funktionerna. T.ex ett namn, eller ett id.
Först måste vi bestämma om värdena ska vara publika eller privata.. Vi vill kanske tilldela ett namn som programmet som kallar på objektet kan komma åt, men samtidigt vill vi kanske ha ett namn som det utomstående programmet inte kan se, och som vi kan använda i alla funktionerna.
Vi utgår från detta, och skriver därför in (under //TODO: raden)
public String pubName;
private String priName;
Public betyder att variabeln kommer att synas från det andra programmet. Private betyder att vi bara kommer att kunna använda den variablen internt i objektet. Blev det för mycket? Nejdå.. Läs igenom det igen, så förstår du. =)
OBS.. Kompilatorn gör STOR skillnad på stora/små bokstäver, så glöm inte att skriva exakt som jag skrivit.. Trust me.. =)
Om vi skulle behöva använda värden inne i funktioner så går även det bra att göra. Då kommer deklarationen av värdena hela enkelt efter inledningshakparantesen ({).
Funktionerna
Precis som med värdena så finns det privata och publika funktioner. Bara för att göra det hela lite roligare så ska vi använda båda..
Vi vill ha 1 funktion för att sätta namnet på objektet, samt 1 funktion för att hämta namnet på objektet. Eftersom vi dessutom skulle ha ett privat namn så vill vi ju såklart ha en funktion som hämtar ut även detta till oss. Lägg in funktionerna efter deklarationen av våra variabler.
Sådär.. Först har vi funktionen som vi sätter namnet med.
//Funktionen som vi kommer att skicka in namnet till
public void setName(String name)
{
/*Kalla på funktionerna som sätter det
publika resp. privata namnet.
*/
setPubName(name);
setPriName(name);
}
För att demonstrera privata kontra publika funktioner så kallar vi på 2 olika funktioner för att sätta det privata resp. publika namnet. Vi skickar med namnet som inparameter.
Så då är det väl lika bra att vi kolla på dessa 2 funktionerna då.
//Funktionen som sätter det privata namnet.
private void setPriName(String name)
{
this.priName = "Private namn: " + name;
}
//Funktionen som sätter det publika namnet.
private void setPubName(String name)
{
this.pubName = "Publikt namn: " + name;
}
Lägg märke till att det står ”private void funktionsnamn(parametrar)” istället för ”public void funktionsnamn(parametrar)”. Genom att använda this.variabelnamn så sätter vi denna instansens variabel till det angivna värdet. (me är motsvarigheten till this i VB.. på ett ungefär iaf.. )
Sen vill vi returnera namnen till programmet som kallar på objektet. Till detta behöver vi 2 funktioner. En för det privata namnet, och 1 för det publika namnet.
//Funktionen som returnerar det publika namnet i en sträng.
public String getPubName()
{
return this.pubName;
}
//Funktionen som returnerar det privata namnet i en sträng.
public String getPriName()
{
return this.priName;
}
Lägg märke till ”public String funktionsnamn()” Detta är en publik funktion, därav Public. Vi har även bytt ut void mot String. Void betyder att funktionen inte returnerar något, men denna funktionen ska returnera namnet, och eftersom namnet är deklarerat som en Sträng så måste funktionen också deklareras att returnera en Sträng.
Hade funktionen skullat returnera en Integer så skulle vi skrivit ”public int funktionsnamn()”.
Om vi nu gjort allting rätt så ska vi kunna kompilera vårt projekt. Gå in på menyn Build och klicka på ”Build”. I bästa fall så ska det komma en dialogruta som säger att kompileringen gått bra.. Har du skrivit fel nånstans så kommer den att påpeka detta.. Var noggrann med stora/små bokstäver!
Vid kompileringen så kommer kompilatorn att automatiskt registrera vår nya komponent, så nu är det dags för testning.
Visual Basic
Skapa ett nytt projekt som vanligt. Gå in under project -> References, och leta upp My First Com (eller vad du nu döpte ditt projekt till) Klicka i den och välj OK. I general declerations så deklarerar du ett ”My first com” objekt genom att skriva.
Dim objTest As [My First COM].Class1
I knapp1 så skapar du en ny instans av objektet genom att skriva
Set objTest = New [My First COM].Class1
Sen är det bara att leka. I mitt exempelprojekt så har jag gjort så att man i knapp 1 sätter namnet, knapp 2 läser det publika namnet, och knapp 3 läser det privata namnet.
Där är kommentarer i exempelkoden!
ASP
Här är principen samma som i VB, förutom att du här själv för skapa referensen till objektet. Gör detta genom att skriva ”set objTest = new server.createobject(”My First Com.Class1”)” Kunde vid skrivtillfället ej skriva ihop en ASP sida eftersom jag inte hade någon server att testa mot, men när du väl skapat instansen till objektet så kan du använda det precis som i vb.. T.ex call objTest.setName(“Ett namn”).
Exempelfil att tanka
Fil: comobjectsinJ.zip
Sammafattning
Förhoppningsvis så har Du lärt dig grunderna för att kunna skriva ett com-objekt i J++. Har du frågor, kommentarer, förbannelser över en alldeles för dålig kurs, osv. så skicka ett mail till Benny.Olsson@Brimstone.se. Skulle du mot förmodan vara intresserad av en uppföljare så se till att skicka ett mail och skriv några glada ord. Glöm inte att titta förbi forumet för Java programmering här på PelleSoft! //Benny Olsson
0 Kommentarer