[VB] GetObject -> aanroep niet geregde dll

Pagina: 1
Acties:

  • DukeMan
  • Registratie: Mei 2000
  • Niet online
Voor een app die ik aan het maken ben wil ik werken met plugin's. Dit zijn eigen gemaakte activex dll's (in vb).

Nu geeft ik de projectnamen allemaal een op elkaar lijkende naam (er verschillen maar 2 letters) en de class namen zijn allemaal het zelfde. Deze twee letters zijn ook in de bestandsnaam aanwezig waar ik de naam van het project kan uithalen:

vb:
comnl.dll
object naam: comnl.clsInterface

comen.dll
object naam: comen.clsInterface

Nu wil ik in mijn app die dll's aanroepen zonder dat deze geregistreerd hoeven te zijn (heb ik zo mijn redenen voor). Dit zou toch mogelijk moeten zijn via GetObject(padnaardll, objectnaam)???

Dit krijg ik niet voor elkaar?!

Als ik doe:
code:
1
Set objDll = GetObject(app.path & strDLL, "clsInterface")

krijg ik de foutmelding: "ActiveX: can't create object."
app.path & strDll kloppen wel, daar ligt het niet aan.

Ik heb hier gezocht, op google, maar ik kan niets vinden wat mij kan helpen.
Weet een van jullie het?

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 19:44

Gerco

Professional Newbie

When this code is executed, the application associated with the specified pathname is started and the object in the specified file is activated.
Dit doet mij denken dat GetObject alleen werkt met ActiveX .EXE's. Je kunt altijd CreateObject nog proberen, maar die werkt ook niet zonder je dll te reggen voor zover ik weet.

Wat je eventueel kunt doen is je plugin's als ActiveX .exe's uitvoeren en op die manier toch met GetObject werken. OF je registreert je dll's als je ze gebruikt en je unregt ze weer als je ermee klaar bent.

Waarom wil je ze eigenlijk NIET geregd hebben?

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • DukeMan
  • Registratie: Mei 2000
  • Niet online
Gebruikers kunnen deze dll van mijn website afhalen, en dan gewoon in de app dir erbij zetten.
Ik wil ze geen moeilijke dingen laten doen, als dat ding registreren, of een setup erom heen draaien.

gewoon neerzetten en werken maar...

Verwijderd

Op maandag 08 juli 2002 15:28 schreef NTGiant het volgende:
Nu wil ik in mijn app die dll's aanroepen zonder dat deze geregistreerd hoeven te zijn (heb ik zo mijn redenen voor).
Je kan NOOIT een object maken zonder dat de DLL geregistreerd is... Zover ik weet kan je wel een DLL in dezelfde directory stoppen en VB registreert en unregistreert die DLL dan 'on the fly'. Ik geef echter geen garantie :)
Dit zou toch mogelijk moeten zijn via GetObject(padnaardll, objectnaam)???
Volgens mij is de eerste parameter niet naar padnaardll, maar padnaarbestand. Dus bv "C:\blad1.xls". Dan zoekt windows er wel het goede object bij (in dit geval "Excel.Application"), of je kan hem helpen met de 2de parameter. Als je alleen het object hoeft te maken, dan kan je volstaan met alleen de class.
code:
1
Set objDll = GetObject(app.path & strDLL, "clsInterface")

krijg ik de foutmelding: "ActiveX: can't create object."
De Class-parameter moet de volledige class-name zijn. In VB is dat dus "<Project>.<Class>". Dus GetObject(,"<Project>.<Class>")

  • DukeMan
  • Registratie: Mei 2000
  • Niet online
De Class-parameter moet de volledige class-name zijn. In VB is dat dus "<Project>.<Class>". Dus GetObject(,"<Project>.<Class>")
Als ik dat doe (GetObject(PadNaarDLL, <Project>.<Class>)) krijg ik de foutmelding:

"error 432: file name or class name not found during Automation operation"

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 02-09 09:31

Crazy D

I think we should take a look.

Een ActiveX dll moet altijd geregt zijn.
Wat je kan proberen, is ff de code rippen van How to Register / UnRegister ActiveX Components through Code en de dll's bij het starten registreren, en bij het afsluiten van je app weer unreggen. Niet helemaal foolproof maar tis misschien een start ;)

Exact expert nodig?


Verwijderd

Op maandag 08 juli 2002 15:56 schreef NTGiant het volgende:
Als ik dat doe (GetObject(PadNaarDLL, <Project>.<Class>))
Volgens mij stond er juist dat je PadNaarDLL weg moest laten :(

GetObject Function
Assigning an Object Reference to a Variable

Verwijderd

En waarom maak je er geen ActiveX exe's van? (Zoals hier al eerder is geopperd). Dat werkt namelijk gegarandeerd (heb het net zelf nog gedaan :)).

Bovendien kan je beter CreateObject gebruiken.
Dus CreateObject("[Naam_van_exe].clsPluginInterface")

Welk plugin framework gebruik je? Ik ben namelijk ook op zoek om zoiets te maken, maar de dingen die ik op www.pscode.com tegenkom zijn niet echt super ;(

Verwijderd

Moet

app.path & strDLL

niet

app.path & "\"& strDLL

zijn ?

  • DukeMan
  • Registratie: Mei 2000
  • Niet online
En waarom maak je er geen ActiveX exe's van?
Bovendien kan je beter CreateObject gebruiken.
Dus CreateObject("[Naam_van_exe].clsPluginInterface")

Welk plugin framework gebruik je? Ik ben namelijk ook op zoek om zoiets te maken, maar de dingen die ik op www.pscode.com tegenkom zijn niet echt super ;(
Ik denk dat ik dit dan idd gebruik. Als dit dan wel werkt!!!

[offtopic]
Ik ben de plugin helemaal zelf aan het bouwen.
Eerst een dll die je aan je app kunt hangen. De zorgt voor de verbinding naar de uiteindelijke plugin dll (exe zal het dus worden).

Het is een plugin om (in eerste instantie) mijn proggie verschillende talen te laten hebben, welke uit een dll gehaald worden. Je kan dus makkelijk een nieuwe dll neerzetten met een andere taal.

  • DukeMan
  • Registratie: Mei 2000
  • Niet online
Op maandag 08 juli 2002 20:50 schreef 00fly747 het volgende:
Moet

app.path & strDLL

niet

app.path & "\"& strDLL

zijn ?
Nee dit zit al in die strDLL

  • Baxlash
  • Registratie: Juni 2000
  • Niet online

Baxlash

Its a boy Genius!

---

  • DukeMan
  • Registratie: Mei 2000
  • Niet online
---
???

  • DukeMan
  • Registratie: Mei 2000
  • Niet online
Ik heb het nu als volgt opgelost.

Ik heb een algemene dll die ik aan mijn app koppel. In deze dll zitten een aantal functies: waaronder een init functie waarmee ik opgeef waar de plugin-dll's staan.
Wanneer ik deze functie aanroept, wordt er gekeken of ze regerd zijn, zoniet dan wordt dat gedaan.
Verder heb ik een paar functies die de plugin-dll aanroepen en er de info uit halen...
Pagina: 1