/ Forside / Teknologi / Udvikling / VB/Basic / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
CLSID
Fra : Bjarke Walling Peter~


Dato : 30-07-01 23:59

Så vidt jeg ved bliver en ActiveX Control "lokaliseret" af dens ClassID.
Hvis dette er sandt stiller det nogle spørgsmål:
Hvordan finder Application Setup Wizard (jeg har VB5) ud af hvilken ClassID
den skal give min ActiveX Control?
Det skal jo være et unikt nummer, skal det ikke?
.... for hvad nu hvis man surfede forbi to forskellige ActiveX Controller med
samme ClassID?

Og hvis det ikke er sandt (det først) - hvad bruges ClassID'en så til?

- Bjarke Walling Petersen



 
 
Niels G (31-07-2001)
Kommentar
Fra : Niels G


Dato : 31-07-01 09:29

Det er ikke Application Setup Wizarden der tildeler ClassID. Det er faktisk
VB IDE'en der gør det, med andre ord det bliver gjort før koden bliver
compileret.
Derfor skal man være opmærksom på hvordan man indstiller 'Version
Compatility'
i project properties.
Et ClassID er en såkald GUID (Global Unique IDentifier), et 128 bit tal.
Denne
GUID er så stor at det er meget usandsynligt der bliver lavet to der er ens.
En
af de ting der typisk bliver nævnt i den forbindelse er, at hvis man har et
netkort
i sin maskine, så bliver grænsen til det totalt usandsynligt at der skulle
blive lavet
to ens GUID inden for de næste par hundre år (eller var det tusinde, det kan
jeg ikke
lige huske). Dette kan lade sig gøre da alle netkort har en 40 bits uniqe
kode.

- Niels G


"Bjarke Walling Petersen" <bwp@bwp.dk> wrote in message
news:9k4ope$2o1o$1@news.cybercity.dk...
> Så vidt jeg ved bliver en ActiveX Control "lokaliseret" af dens ClassID.
> Hvis dette er sandt stiller det nogle spørgsmål:
> Hvordan finder Application Setup Wizard (jeg har VB5) ud af hvilken
ClassID
> den skal give min ActiveX Control?
> Det skal jo være et unikt nummer, skal det ikke?
> ... for hvad nu hvis man surfede forbi to forskellige ActiveX Controller
med
> samme ClassID?
>
> Og hvis det ikke er sandt (det først) - hvad bruges ClassID'en så til?
>
> - Bjarke Walling Petersen
>
>



Bjarke Walling Peter~ (01-08-2001)
Kommentar
Fra : Bjarke Walling Peter~


Dato : 01-08-01 00:33

Niels G skrev:
> Det er ikke Application Setup Wizarden der tildeler ClassID. Det er
faktisk
> VB IDE'en der gør det, med andre ord det bliver gjort før koden bliver
> compileret.

Men hvordan (hvorfra) finder VB IDE'en denne ClassID?
Hvis den nu forhøjer et bestemt tal med én hver gang man laver en ny
Control, skal alle programmøres start-ClassID være forskellige... jeg kan
ikke helt forestille mig hvordan det skulle kunne løses.

> Derfor skal man være opmærksom på hvordan man indstiller 'Version
> Compatility'
> i project properties.
.... bla bla bla

Hvor indstiller man det? - og hvad er det?

- Bjarke Walling Petersen



Niels G (01-08-2001)
Kommentar
Fra : Niels G


Dato : 01-08-01 08:26


"Bjarke Walling Petersen" <bwp@bwp.dk> wrote in message
news:9k7f65$egg$1@news.cybercity.dk...
> Niels G skrev:
> > Det er ikke Application Setup Wizarden der tildeler ClassID. Det er
> faktisk
> > VB IDE'en der gør det, med andre ord det bliver gjort før koden bliver
> > compileret.
>
> Men hvordan (hvorfra) finder VB IDE'en denne ClassID?
> Hvis den nu forhøjer et bestemt tal med én hver gang man laver en ny
> Control, skal alle programmøres start-ClassID være forskellige... jeg kan
> ikke helt forestille mig hvordan det skulle kunne løses.

Jeg ved der findes et API til at lave en GUID, men jeg ved ikke lige hvad
det hedder.
Det eneste jeg kan sige, omkring algoritmen der laver GUID, er at den er del
af
Open Software Foundation (OSF) Distributed Computing Environment (DCE)
(kilde: Microsoft Visual Basic 6.0 Component Tools Guide p337 )
Så jeg går ud fra det ikke bare er en simpel formel, ellers ville man nok
støde på
formlen noget ofter.

> > Derfor skal man være opmærksom på hvordan man indstiller 'Version
> > Compatibility'
> > i project properties.
> ... bla bla bla



> Hvor indstiller man det? - og hvad er det?

Det sidste først (jeg tager lige lidt ekstra med, så alle kan følge med
..

Et Com komponent (activeX control eller dll) har et typelib defineret ved en
guid.
Hver klasse i komponenten har et ClassID. Og hver klasse har et eller flere
interface
defineret ved en guid (til hvert interface).

Der er tre indstillinger:
- No compatibility: Alle ovennævte guid's bliver dannet på ny. Effekt:
programmer
der brugte en tidliger version af komponenten, den før den er kompileret op
mod
den ny komponent. I udvikligsmiljøet skal man skal typisk også ind og
indsætte
kontroller på ny, og/eller ind og vælge referencen til dll igen.

- Project compatibility: Her beholdes typelibID og classID, men interfaces
laves på ny.
Effekt: For kompilerede programmer den samme som ved No compatibility.
Under udviklignsmiljøet uden nogen problemer.

- Binary compatibility: Her beholdes alle guid og evt. nye tilføjes
(classIDs og interfaceIDs).
Effekt: Gamle programmer kan bruge den nye komponent uden genkompilering. I
'udviklingsmiljøet' må man ikke længre ændre udsende af eksisterende
funktioner
parametere liste, man må ej heller fjerne dem. Man må gerne ændre
funktionaliteten
i funktionerne, og man må også gerne tilføje nye.

Man indstiller det i project properties (neders i project menuen).

(og nu ikke noget med smilys, hvis du godt vidste hvad det var og hvor

- Niels G.



Bjarke Walling Peter~ (01-08-2001)
Kommentar
Fra : Bjarke Walling Peter~


Dato : 01-08-01 13:08

Niels G skrev:
> (og nu ikke noget med smilys, hvis du godt vidste hvad det var og hvor

Njaa... okay da...
Faktisk kendte jeg ikke til det - så mange tak!

- Bjarke Walling Petersen



Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408847
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste