Springen naar inhoud


- - - - -

Ocx


  • Log in a.u.b. om te beantwoorden
Er zijn 9 reacties in dit onderwerp

#1 Ludi

Ludi

    Senior Developer

  • Leden
  • PipPipPip
  • 185 berichten
    Laatst bezocht vandaag, 00:14

Geplaatst op 10 May 2012 - 11:00


Hallo,

Indien ik een nieuwe OCX maak en deze helemaal goed is en gecomplileerd is dan wil ik de nieuwe reference key weten uit de registry.

Dus mijn nieuwe OCX heeft de naam MyOcx.ocx en met deze naam wil ik in de registry zoeken naar zijn nieuwe reference key.

#2 RedThread

RedThread

    Beheerder VBIB

  • Beheerder
  • 3294 berichten
    Laatst bezocht vandaag, 01:32
  • LocatieTongeren,Belgium.
Inzender

Geplaatst op 10 May 2012 - 11:15

Als ik het goed lees wil je weten hoe je een eigen ocx kunt toevoegen aan een nieuw project ?


1- Control - T (oftewel via het menu Project > Components)
2- Op de controls - tab heb je een button "browse". Hiermee kun je je ocx toevoegen aan je lijst met controls.
3- Nieuwe ocx op je form slepen.

*** If you like youre solution or appriciate the crew's effort, please click on the facebook like or the Google +1 button ***

 

- Any fool can know, the point is to understand -


email : RedThread@vbib.be | MSN : Red_Thread@Hotmail.com

Huisregels - Tutorials - VS 2012 Express - Keybinding Posters - Code Tags gebruiken - LessThenDot - MSDN


#3 Vozzie

Vozzie

    Moderator

  • Moderators
  • 1852 berichten
    Laatst bezocht vandaag, 07:00
Inzender

Geplaatst op 10 May 2012 - 12:15

Hallo,

Die "reference key" is waarschijnlijk de "CLSID".

Open je project of control met kladblok. Die staat daar normaal in,...

Zie hier.

Ofwel gewoon zoeken in de registry naar de naam van je control...

Zie hier.

In .Net code kan dit zo,...

Visual Basic Code:
Dim t As Type = Type.GetTypeFromProgID("WScript.Shell")
MsgBox(t.GUID)

In VB6 code kan het ook, volgt straks, eerst eten :)

Visual Basic Code:
Option Explicit

Private Type GUID
	Data1 As Long
	Data2 As Integer
	Data3 As Integer
	Data4(0 To 7) As Byte
End Type

Private Declare Function CLSIDFromProgID Lib "ole32.dll" (ByVal progID As Long, rclsid As GUID) As Long
Private Declare Function StringFromCLSID Lib "ole32.dll" (pCLSID As GUID, lpszProgID As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Sub CoTaskMemFree Lib "ole32.dll" (pv As Long)

Function ProgIDToCLSID(progID As String) As String
	Dim clsid As GUID
	Dim result As Long
	Dim pStrClsid As Long
	Dim sClsid As String

	result = CLSIDFromProgID(StrPtr(progID), clsid)
	If result <> 0 Then
		ProgIDToCLSID = ""
		Exit Function
	End If

	result = StringFromCLSID(clsid, pStrClsid)
	If result <> 0 Then
		ProgIDToCLSID = ""
		Exit Function
	End If

	sClsid = Space$(38)
	CopyMemory ByVal StrPtr(sClsid), ByVal pStrClsid, LenB(sClsid)

	CoTaskMemFree pStrClsid

	ProgIDToCLSID = sClsid
End Function


Private Sub Command1_Click()
	Dim clsid As String
	clsid = ProgIDToCLSID("WScript.Shell")
	MsgBox clsid
End Sub


In die code vervang je "WScript.Shell", door "ProjectNaam.ClassNaam"


Groetjes
Stappen, keuzes en herhaling combineren is programmeren.
Explicit, Strict and don't Infer

#4 Ludi

Ludi

    Senior Developer

  • Leden
  • PipPipPip
  • 185 berichten
    Laatst bezocht vandaag, 00:14

Geplaatst op 10 May 2012 - 16:40

Hoe ik mijn eigen OCX moet toevoegen dat weet ik. Het gaat er om dat een OCX zijn eigen "Reference Key" /  CLSID krijgt nadat  je OCX hebt gecompileerd.
Doordat ik de naam van de OCX weet wil ik met VB deze CLSID achterhalen. Niet via regedit of andere tools.

De VB code van Vozzie is juist maar ik krijgt een lege CLSID terug.

#5 Ludi

Ludi

    Senior Developer

  • Leden
  • PipPipPip
  • 185 berichten
    Laatst bezocht vandaag, 00:14

Geplaatst op 10 May 2012 - 23:23

Hallo,

Door de code hier boven van Vozzie ben ik gaan zoeken op internet. Wat met VB6 is alles mogelijk (bij alle OS).
Wat hebben we hier nodig.

References <TypeLib Information>

Visual Basic Code:
   Dim tlibinfo As TypeLibInfo
   Set tlibinfo = New TypeLibInfo

   Dim sFullpath As String

   tlibinfo.ContainingFile = sFilename   << Deze wordt gevuld bv vanuit commondlg

   Debug.Print tlibinfo.Guid
   Debug.Print tlibinfo.MajorVersion &amp; "." &amp; tlibinfo.MinorVersion
   Debug.Print tlibinfo.LCID
   Debug.Print tlibinfo.Name

Debug.Print tlibinfo.Guid geeft CLSID terug van de compileerde ocx.

Daar ik de naam van de OCX-file weet en de CLSID van de OCX ben ik in staat van uit mijn ..vbg file door mijn complete vb-project te wandelen op te gaan zoeken naar <Object> (indien je in je ..vbg en/of ...vbp file kijkt staan daar regels die beginnen met oa Object, die moeten we hebben) met ocx naam. Komt deze voor dan kan ik die vervangen door mijn tlibinfo.Guid van zo juist.

Wat heb je hieraan, indien je net als ik een vbg file hebt met een 15 ..vbp files erin. Als je dan ocx files hebt die voor kunnen komen in meedere ...vbp files heb hier enorm veel voordeel bij.

Ik hoop dat iemand hier iets aan heeft want ik ben zeer blij met het resultaat.
Mocht iemand iets meer info nodig hebben dan zal ik mijn best doen.

[mod] Gelieve visual basic code van VB tags te voorzien, dank u [/mod]

#6 Vozzie

Vozzie

    Moderator

  • Moderators
  • 1852 berichten
    Laatst bezocht vandaag, 07:00
Inzender

Geplaatst op 16 May 2012 - 11:41

Hallo Luni,

Bericht bekijkenLudi, op 10 May 2012 - 11:00, zei:

Indien ik een nieuwe OCX maak en deze helemaal goed is en gecomplileerd is dan wil ik de nieuwe reference key weten uit de registry.
Dus mijn nieuwe OCX heeft de naam MyOcx.ocx en met deze naam wil ik in de registry zoeken naar zijn nieuwe reference key.

Had je een oplossing gegeven om deze te zoeken in registry,  

Bericht bekijkenLudi, op 10 May 2012 - 16:40, zei:

De VB code van Fozzie is juist maar ik krijgt een lege CLSID terug.

En wat geef je mee als argument aan ProgIDToCLSID?  

Ik heb zelf getest met "WScript.Shell" en een eigen gemaakte OCX "AxServer3.Application" en krijg telkens de CLSID terug, dus dat die code bij jou leeg terug geeft is maar raar! Tenzij je de OCX nog niet geregistreerd heb. Dit zal natuurlijk pas werken als de OCX al geregistreerd is... En dit werkt niet met de bestandsnaam maar met "ProjectNaam.ClassNaam". Zoals ik ook vermeld had!

Bericht bekijkenLudi, op 10 May 2012 - 23:23, zei:

Wat met VB6 is alles mogelijk (bij alle OS).

Bedoel je dat met VB6 alles mogelijk is op alle operating systems? Weet niet waar je dat haalt hoor...

Alles mogelijk? Heeft oa een minimum aan OO support.

Bij alle OS? -> http://en.wikipedia....erating_systems

Bericht bekijkenLudi, op 10 May 2012 - 23:23, zei:

Ik hoop dat iemand hier iets aan heeft want ik ben zeer blij met het resultaat.
Mocht iemand iets meer info nodig hebben dan zal ik mijn best doen.

Het is alvast heel goed dat je de goede oplossing voor jou mede deelt... Dat waarderen we.

Groetjes

BTW: De naam is Vozzie en niet Fozzie., dank u,...
Stappen, keuzes en herhaling combineren is programmeren.
Explicit, Strict and don't Infer

#7 Ludi

Ludi

    Senior Developer

  • Leden
  • PipPipPip
  • 185 berichten
    Laatst bezocht vandaag, 00:14

Geplaatst op 16 May 2012 - 15:37

Sorry van je naam hoor.


:-P

#8 Vozzie

Vozzie

    Moderator

  • Moderators
  • 1852 berichten
    Laatst bezocht vandaag, 07:00
Inzender

Geplaatst op 16 May 2012 - 16:32

"Wat heb je mee gegeven als argument aan ProgIDToCLSID, de bestandsnaam of de ProgID(ProjectNaam.ClassNaam)?"

Groetjes
Stappen, keuzes en herhaling combineren is programmeren.
Explicit, Strict and don't Infer

#9 Ludi

Ludi

    Senior Developer

  • Leden
  • PipPipPip
  • 185 berichten
    Laatst bezocht vandaag, 00:14

Geplaatst op 21 May 2012 - 10:23

Hef mijn account maar op.

#10 Ludi

Ludi

    Senior Developer

  • Leden
  • PipPipPip
  • 185 berichten
    Laatst bezocht vandaag, 00:14

Geplaatst op 23 May 2012 - 14:28

Vozzie,

Ik wilde met de bestandsnaam van de OCX-file in het registry gaan zoeken om zo de CLSID te achterhalen. Dat is ook het argument wat ik heb mee gegeven.
Daarom krijg ik met jou code een lege CLSID terug.

Ludi.




0 gebruiker(s) lezen dit onderwerp

0 lid(leden), 0 bezoeker(s), 0 anonieme gebruikers

Inloggen


Untitled 1

Hosting provided by Combell
Met dank aan Jürgen voor de jarenlange inzet van visualbasic.be (anno dec 2000)
Met dank aan Mike en Ronneke voor de jarenlange inzet van vbib.be (anno dec 2010)
vbib.be - vbnet.be - vbdotnet.be - visualbasic.be