[C++] Globale variabelen in dll.

Pagina: 1
Acties:

  • FireAge
  • Registratie: Augustus 2002
  • Laatst online: 09:23
Ik heb een 3rd party library van nikon waarmee ik op het werk een camera aan wil sturen voor geautomatiseerde meetprocessen. Ze hebben er een voorbeeld programma bijgeleverd waarin de camera via de command line met de cijfers 1 t/m 9 bestuurd kan worden.

Nu wil ik een dll bouwen die het voor mij mogelijk maakt om de functies van de dll op een simpele manier te kunnen bereiken, zodat ik ze in labview aan kan roepen.

Mijn probleem is dat het voorbeeld programma 3 globale variabelen gebruikt die compleet door de gehele software verweven zitten. Dit werkt prima bij de exe, maar nu vraag ik mij af hoe dit bij een dll werkt.

Als ik de software omgooi naar een dll via:
code:
1
2
3
4
5
#ifdef D70_EXPORTS
#define D70_API __declspec(dllexport)
#else
#define D70_API __declspec(dllimport)
#endif

En bijvoorbeeld 4 beschikbare functies maak.
1: Open_Cam
2: Take_Picture
3: Save_Picture
4: Close_Cam

Stel functie 1 vult de globale variabele met een handle naar de camera.
Als ik dan later functie 2 aanroep, zit die variabele dan nog vol, of wordt die gewist zodra functie 1 klaar is?
Ik weet dat ik die globale variabele steeds als pointer mee kan geven, maar dan moet ik 50+ functies opnieuw programmeren.

Weet iemand hoe dat zit met globale variabelen in dll's?

EDIT: spelling

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 05-05 22:23
Je kunt variabelen exporteren uit de dll. Vraag is echter of je dit wel wilt.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Radiant
  • Registratie: Juli 2003
  • Niet online

Radiant

Certified MS Bob Administrator

Wat er normaal gedaan wordt met dit soort dingen is dat Open_Cam gewoon een handle teruggeeft dat je verder in al die functies weer moet meegeven. Hierdoor is het ook mogelijk om meerdere camera's te openen.

Maar als je toch echt een globale variabele wil gebruiken kan dit volgens mij gewoon, de dll blijft gewoon in het geheugen terwijl je programma draait, als deel van je programma (bij dynamisch linken).

  • FireAge
  • Registratie: Augustus 2002
  • Laatst online: 09:23
Ik weet dat het niet mooi is, maar ik zou graag die globalen behouden, het zou me anders dagen kosten om de hele boel om te programmeren. Wel zo mooi, niet zo efficient.

Ik zal het in ieder geval gewoon even proberen.
Ik weet niet of labview globale variabelen uit een dll kan aanroepen, maar dat merk ik vanzelf.

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 05-05 22:23
FireAge schreef op maandag 04 juli 2005 @ 10:12:
Ik weet dat het niet mooi is, maar ik zou graag die globalen behouden, het zou me anders dagen kosten om de hele boel om te programmeren.
Dat heb je met globale variabelen. Reden te meer om het niet zo te doen. :)

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 05-05 18:07

.oisyn

Moderator Devschuur®

Demotivational Speaker

Globale variabelen in dlls zijn niets anders dan globale variabelen in een enkele exe. Een dll is niets meer dan code wat tijdens runtime in je executable gelinkt wordt. Het shared dus de address space van je project, en derhalve ook de functies en variabelen.

Het wordt natuurlijk wat anders als de variabelen in een dll staan, en je forceert die dll te ontladen en weer te herladen. Maar ik denk niet dat je dat hier doet, of wel? :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
FireAge schreef op maandag 04 juli 2005 @ 10:12:
Ik weet dat het niet mooi is, maar ik zou graag die globalen behouden, het zou me anders dagen kosten om de hele boel om te programmeren. Wel zo mooi, niet zo efficient.
De vraag is of je de tijdswinst die je nu boekt door de functies niet opnieuw te programmeren, straks weer kwijt zult raken aan rekening houden met side-effects en het verzinnen van hacks om het spul werkend te houden...

  • FireAge
  • Registratie: Augustus 2002
  • Laatst online: 09:23
Ik ben intussen tot dezelfde conclusie gekomen.
Voor die 4 functies is het teveel werk, maar ik moet er straks nog veel meer aan doen en dan sla ik mezelf waarschijnlijk voor mijn kop dat ik het niet meteen goed gedaan heb. 8)7
Ben intussen druk bezig al die globalen eruit te halen. :X

Iedereen bedankt voor de feedback, twas net wat ik nodig had om van mijn luie reet af te komen en aan de slag te gaan _/-\o_

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 05-05 22:23
Wat hebben we met z'n allen toch een positieve invloeden op onze collega's :)

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.

Pagina: 1