Toon posts:

Visual Basic en DLL

Pagina: 1
Acties:
  • 101 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik heb een dll gecompileerd en in een directory gezet, en deze dll wordt door verschillende visual blaaskaak projecten gebruikt. So fas, so good....

Vervolgens wilde ik in in van die projecten wat wijzigen (knopje bijbouwen, bijzonder spannend), en ineens lijkt mijn dll niet meer te werken.. Kan gebeuren dacht ik, dus ik maar een van mijn andere projecten opgestart. En het vreemde is dat die dus ineens ook niet meer met mijn dll wil werken (en de andere ook niet), terwijl ik daar niets gewijzigd heb!

Heb toen geprobeerd de dll maar opnieuw te registreren, maar dat helpt ookal niet :'(

Persoonlijk denk ik dat het dus een visual basic instelling moet zijn die op de een of andere manier gewijzigd is, heeft iemand een idee wat deze ellende kan veroorzaken ??????

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:04
Verwijderd schreef op 04 september 2002 @ 11:53:
Ik heb een dll gecompileerd en in een directory gezet, en deze dll wordt door verschillende visual blaaskaak projecten gebruikt. So fas, so good....
Als je VB maar 'Visual Blaaskaak' vind, waarom gebruik je het dan?
Vervolgens wilde ik in in van die projecten wat wijzigen (knopje bijbouwen, bijzonder spannend), en ineens lijkt mijn dll niet meer te werken.. Kan gebeuren dacht ik, dus ik maar een van mijn andere projecten opgestart. En het vreemde is dat die dus ineens ook niet meer met mijn dll wil werken (en de andere ook niet), terwijl ik daar niets gewijzigd heb!
Hoe ben je zeker dat het aan de dll ligt?
Wat is 'niet meer werken'. Welke fouten krijg je?
etc.....

Lees dus even de P&W Quickstart.
Welkom in P&W -> Quickstart om snel aan de slag te kunnen
Persoonlijk denk ik dat het dus een visual basic instelling moet zijn die op de een of andere manier gewijzigd is, heeft iemand een idee wat deze ellende kan veroorzaken ??????
[/nohtml]
Als je denkt dat het met instellingen te maken heeft, dan hoort jouw topic niet in P&W.

https://fgheysels.github.io/


  • glashio
  • Registratie: Oktober 2001
  • Laatst online: 25-08 11:17

glashio

C64 > AMIGA > PC

Check Menu Project->References , en kijk ff ofdat je Path verwijzing nog klopt naar je dll.... Bovenstaande van 'Whoami' vindt ik persoonlijk wel een beetje overdreven zeg... tjonge tjonge...

> Google Certified Searcher
> Make users so committed to Google that it would be painful to leave
> C64 Gospel
> [SjoQ] = SjoQing


Verwijderd

Topicstarter
Ok, eerst wat reacties op 'whoami' ....

De reden dat ik visual basic gebruik heet werk, persoonlijk maak ik liever programma's in delphi

Met niet meer werken bedoel ik dat een functie die ik aanroep eruit klapt met error, maar verdere details leken me niet zo boeiend omdat dat los staat van het probleem wat ik had....

En sorry, vergeef me dat ik het hier gepost heb... ik ben dan ook maar een domme newbie. Waar zou ik het dan wel moeten plaatsen??

glashio, bedankt voor de tip ... dit lijkt goed te staan (heb nog even geprobeerd dit opnieuw te selecteren maar helaas geen verbetering...

Verwijderd

En als je nu een nieuw project maakt die een functie in je dll aanroept ?
Klapt die er ook uit ?

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:04
[nohtml]
Verwijderd schreef op 04 september 2002 @ 12:50:

Met niet meer werken bedoel ik dat een functie die ik aanroep eruit klapt met error, maar verdere details leken me niet zo boeiend omdat dat los staat van het probleem wat ik had....
Alle details kunnen belangrijk zijn. Met welke error klapt hij eruit?

https://fgheysels.github.io/


Verwijderd

Je DLL doet het niet meer omdat je waarschijnlijk binary compatibility hebt uitgezet. Elke keer dat je je dll compileert krijgen de classes in de dll dan een ander GUID (lang uniek nummer om de class uniek te identificeren).

Doordat de classes een nieuw GUID hebben gekregen kunnen reeds gecompileerde programma's de classes niet meer vinden in de registry. En daardoor krijg je die "ActiveX control cannot create object" (o.i.d.) meldingen.

Om je oude programma's weer aan de praat te krijgen moet je ze dus openen in VB en bij references de oude reference verwijderen en de nieuwe dll toevoegen.

Om dit in de toekomst te voorkomen kun je binary compatibility aanzetten in je VB DLL project. Overigens blijft binary compatibility alleen gehandhaaft zolang je de interface van de class niet veranderd, oftewel geen functies toevoegd / verwijderd etc. Je kunt wel de code binnen een functie (method) aanpassen zonder compatibility te breken.

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 30-08 17:59

Gerco

Professional Newbie

Functies toevoegen breekt de binary compatibility niet, properties toevoegen en implementatie wijzigen ook niet. Je krijgt pas een probleem als je al bestaande properties/methods gaat verwijderen of wijzigen.

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


  • KO
  • Registratie: December 2001
  • Laatst online: 12-11-2023

KO

Gerco schreef op 04 september 2002 @ 13:28:
Functies toevoegen breekt de binary compatibility niet, properties toevoegen en implementatie wijzigen ook niet. Je krijgt pas een probleem als je al bestaande properties/methods gaat verwijderen of wijzigen.
Je zal dus een nieuwe referentie naar je dll moeten maken en executabele's opnieuw moeten compileren.

edit:

zie klokkie dus 8)7

Yesterday Is History. Today Is A Gift. Tomorrow Is Mystery


Verwijderd

Als ik het goed begrijp heeft stealthie de DLL niet aangepast, maar de applicatie die de DLL aanroept. (Knopje toevoegen in een DLL kan volgens mij alleen in ActiveX Documents en die gebruikt bijna niemand, behalve Baan\Invensys)

Kun je de properties\methods van de DLL wel bekijken in de Object Browser (F2)

  • KO
  • Registratie: December 2001
  • Laatst online: 12-11-2023

KO

Lijkt me sterk dat dan de dll niet meer werkt, er moet daarin wat veranderd zijn

Yesterday Is History. Today Is A Gift. Tomorrow Is Mystery


Verwijderd

Topicstarter
Bedankt voor de tips, maar ik denk dat ik het toch nog iets duidelijker zal proberen uit te leggen (daarin had je dus toch gelijk whoami).

De DLL waar ik het over gehad heb, bevat een functie waarmee ik met een form in verschillende talen kan weergeven (mbv een tekstbestandje). Deze dll is compileerd en daar kom ik dus eigenlijk niet meer aan.

Vervolgens pas ik een visual basic project aan (die dus gebruik maakt van mijn dll) door daar in een van de forms een button extra te plaatsen. Vanaf dat moment werkt de boven beschreven functie niet meer, terwijl de knop die ik bij heb gebouwd al meerdere malen is gebruikt. Debuggen en de melding opvangen kan dus niet meer, omdat de dll al een binary is.... En om het nog mooier te maken, als ik het mbv de code van de dll probeer te debuggen, dan werkt het perfect (ik weet zeker dat de code ongewijzigd is).

Ik heb ook nog geprobeerd een nieuw project te starten (tip van ErikvSon), en daar werkt het ook niet meer.

De enige manier waarmee ik het aan de praat krijg, is het opnieuw compileren van de dll (met binary compatibilty).

Wat ik me kan voorstellen is dat referenties die gebruikt worden door de dll een conflict hebben met de referenties die ik bij mijn projecten gebruik, alleen hoe zoek ik zoiets uit???

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 01-09 13:54

Crazy D

I think we should take a look.

Een dll debug je door het dll project te openen en te runnen, en in een 2e VB het project te openen en starten dat gebuik maakt van die dll. (Of het dll-project toevoegen aan je programma-project, maar aangezien ik altijd de 1e manier doe ken ik deze manier niet echt... :))

Nu kun je breakpoints zetten en de hele mikmak in je dll, en als je dan daar aankomt kun je dus normaal debuggen.

Exact expert nodig?


Verwijderd

Topicstarter
Ja, ik weet hoe ik een dll kan debuggen door het project toe te voegen, maar het probleem is dan dat ik de fout niet gereproduceerd krijg ;-(

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 01-09 13:54

Crazy D

I think we should take a look.

Hmm das dan mooi zout :P
MsgBoxjes plaatsen dan maar? :)

Of zit je button toevallig in een array? Dat had ik van de week, programma crashde na drukken op een knop die in een array zit (binnen VB werkte het wel prima), button hernoemd en geen index gegeven, en het werkt wel goed...

Exact expert nodig?


  • Sinedia
  • Registratie: Juli 2002
  • Laatst online: 26-07 13:50
Verwijderd schreef op 04 september 2002 @ 17:56:
Ja, ik weet hoe ik een dll kan debuggen door het project toe te voegen, maar het probleem is dan dat ik de fout niet gereproduceerd krijg ;-(
Als die fout er was vanwege de binary compatibility (zoals al eerder geopperd was en waar het verdacht veel op lijkt :) ) dan kan je dit met debuggen ook niet achterhalen / reproduceren, want dit is alleen van toepassing op al gecompillerd materiaal.

Verwijderd

Gerco schreef op 04 september 2002 @ 13:28:
Functies toevoegen breekt de binary compatibility niet, properties toevoegen en implementatie wijzigen ook niet. Je krijgt pas een probleem als je al bestaande properties/methods gaat verwijderen of wijzigen.
Het is andersom.
Je kan de implementatie, dus de code achter de functie, naar hartelust wijzigen zonder dat compatibility wordt gebroken. Dat gebeurt juist wanneer je methods of properties toevoegd of verwijderd.

Verwijderd

Topicstarter
Als je een dll hebt die je niet met binary compatibility hebt gecompileerd, dan krijg je vanzelf je meldig 'ActiveX control cannot create object' omdat de GUID niet gevonden kan worden.
Maar in mijn geval wordt de dll dus wel gevonden en wordt de functie daarbinnen wel aangeroepen, maar die gaat eruit met een error. Vandaar dat ik de eerder beschreven melding ook niet krijg, en dat geeft mij de reden om te denken dat er misschien een reference binnen de dll een conflict geeft met de references die mijn project gebruikt. Dat verklaart ook waarom de executables van de verschillende projecten wel nog steeds werken, maar het opnieuw compileren niet meer....

Maar ja, hoe kan ik nu nog uitzoeken welke referenties de dll gebruikt zodat ik die kan vergelijken met de referenties van het projec wat niet meer werkt???

Verwijderd

Er is wel een MS tooltje waarmee je kan kijken welke dependencies een bepaald programma of dll heeft. Ik weet de naam niet meer, maar volgens mij zat het zelfs standaard bij VS.

  • Lorn
  • Registratie: Maart 2000
  • Laatst online: 13-01-2025

Lorn

I have a bad feeling...

De Package & Deployment wizard kan je een dependency file voor je project laten opstellen. Kun je in een keer zien welke ocx-en en dll's je gebruikt. Best handig ook als je een InstallShield wilt bouwen :)

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 30-08 17:59

Gerco

Professional Newbie

Ik schreef:
Functies toevoegen breekt de binary compatibility niet, properties toevoegen en implementatie wijzigen ook niet. Je krijgt pas een probleem als je al bestaande properties/methods gaat verwijderen of wijzigen.
(en dan heb ik het dus over de signature daarvan, niet de implementatie).
Klokkie schreef:
Het is andersom.
Je kan de implementatie, dus de code achter de functie, naar hartelust wijzigen zonder dat compatibility wordt gebroken. Dat gebeurt juist wanneer je methods of properties toevoegd of verwijderd.
Je begrijpt me verkeerd, dit is wat ik bedoel:
Uit: Levels of binary version compatibility (MSDN)
Version compatible means that objects and/or methods have been added to the type library, but no changes were made to existing properties or methods. Both old and new client applications can use the component.

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


  • DaRace
  • Registratie: Juni 2001
  • Laatst online: 03-10-2023
Heeft het niet gewoon wat te maken met het feit dat er geen vertaling voor deze (nieuwe) knop in je tekstbestandje staat of zo? Het klinkt allemaal een beetje vreemd....

Verwijderd

Topicstarter
Zeker weten dat het allemaal vreemd klinkt, ik ben dan ook helemaal de weg kwijt :'(

Maar de grap is dat ik in de dll voor alle componenten van een gegeven form bepaalde properties een nieuwe waarde ga toewijzen; bijv. voor een button de propery 'caption' en voor een button van een toolbar de property 'tooltiptext'. En blijkbaar gaat het daar fout, omdat ie misschien een object mbv een verkeerde reference probeert te benaderen.... en helaas is de error-handling vrij beperkt in deze functie dus iets achterhalen is lastig (dat ga ik dus zeker in de volgende versie wijzigen).

Verwijderd

Gerco schreef op 05 september 2002 @ 13:39:
(en dan heb ik het dus over de signature daarvan, niet de implementatie).
Inderdaad, ik begreep je verkeerd. _/-\o_
Pagina: 1