[VC++] Van string naar control?

Pagina: 1
Acties:

  • Klippy
  • Registratie: Oktober 2000
  • Laatst online: 20:51

Klippy

Still Game

Topicstarter
Ja ik heb weer eens een gare vraag :P

Dit zal wel niet kunnen, maarja ik denk probeer het maar eens.

Ik heb dus een string. Die bevat de naam van een button. Heb dus een member variabele van type CButton met dezelfde naam als die string.

Kan ik nou niet op een of andere manier iets doen daarmee, dus dat omzetten naar een button, typecast ofzo :P
Zou me best wat werk schelen namelijk ;)

Bijv.
C++:
1
2
3
4
5
6
7
 
CString /*(of char)*/ naam;

naam = "m_Button1";


((CButton)naam).SetButtonStyle(bla,true);

oid ;)

Steam | SXQncyBhbGwgZ29vZCwgbWFuISDwn5iO


  • whoami
  • Registratie: December 2000
  • Laatst online: 20:46
Neen dat kun je niet. (Wat een rare gedachten toch....)

Wat je wel kunt doen is alle controls op de form aflopen totdat je de control gevonden hebt met die naam en dan daar bewerkingen gaan op doen.

https://fgheysels.github.io/


  • Klippy
  • Registratie: Oktober 2000
  • Laatst online: 20:51

Klippy

Still Game

Topicstarter
whoami schreef op 19 November 2002 @ 10:12:
Neen dat kun je niet. (Wat een rare gedachten toch....)

Wat je wel kunt doen is alle controls op de form aflopen totdat je de control gevonden hebt met die naam en dan daar bewerkingen gaan op doen.
Hehe :P
Ja dat idee had ik ook al, maarja ik denk je weet maar nooit, ik heb de laatste tijd dingen gezien op MSDN waarvan ik dacht van "wow kan dat?" :)
Dus ik denk vraag het eens ;)

Maar bedankt dan ;)

Steam | SXQncyBhbGwgZ29vZCwgbWFuISDwn5iO


  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 28-08 12:32

johnwoo

3S-GTE

Gerelateerd probleem:

Ik ben bezig met een objectgeorienteerde laag voor het WinBar2 plugin framework. Een programmeur kan plugin classes schrijven door CPlugin te subclassen. Een aantal van dit soort plugin classes vormen samen een Package. Een package bevindt zich in een DLL. De CPlugin en CPackage base classes bevinden zich in een library, om de plugin programmeur af te schermen van de low-level afhandeling van communicatie met de executable.

Op dit moment maak ik alle plugin objecten aan zodra de DLL geladen wordt, en heb ik ze een OnInit en OnQuit method gegeven waarin ze initialization/finalization kunnen doen. Maar eigenlijk zou het gepaster zijn als dit in de constructor/destructor gedaan wordt. Het probleem is dat ik in de Package (DLL dus) niet vantevoren weet welke plugins op welk moment actief moeten worden.
Nu kan ik de plugin programmeur een overridable method 'CreatePlugin' geven in de CPackage class, die een string meekrijgt met de naam van de plugin die gecreate moet worden, en waarin de programmeur dan zelf de juist plugin instantieert en pointer teruggeeft. Maar het zou netter zijn als de Package zelf de plugins kan creeren en vernietigen op de juiste momenten.
Ik ben dus op zoek naar een soort ClassFactory pattern ofzo, dat een class kan instantieren gegeven een string/identifier. Nu weet ik dat in een unmanaged C++ omgeving een getClassFromName-achtige functie onmogelijk is (LiquidSilver's vraag), maar misschien zijn er mooie constructies/trucjes om bovenstaand probleem op te lossen?

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • Klippy
  • Registratie: Oktober 2000
  • Laatst online: 20:51

Klippy

Still Game

Topicstarter
Heb ik toch nog ff een vraagje.
Kan ik niet uit die string een ID halen dan?

Een ID is ook maar een UINT wat gedefinieerd is.
Is er geen mogelijkheid om dan bijvoorbeeld een string te vergelijken met een WORD of die string te converteren naar een int afhankelijk van de string?

Klinkt misschien raar, maarja :)

Nou kan ik wel een struct maken ofzo met een string en een ID, maar dan moet ik weer de hele tijd een array van die structs gaan doorlopen... Moet eigenlijk zo snel mogelijk gebeuren...

Steam | SXQncyBhbGwgZ29vZCwgbWFuISDwn5iO


Verwijderd

Klinkt alsof je de COM aan het heruitvinden bent check de documentatie van de IDispatch interface es, misschien dat je daar wat leuke idee'en uit kan halen (beter goed gejat dan slecht nagemaakt toch?!)

  • Klippy
  • Registratie: Oktober 2000
  • Laatst online: 20:51

Klippy

Still Game

Topicstarter
Verwijderd schreef op 19 november 2002 @ 12:58:
Klinkt alsof je de COM aan het heruitvinden bent check de documentatie van de IDispatch interface es, misschien dat je daar wat leuke idee'en uit kan halen (beter goed gejat dan slecht nagemaakt toch?!)
Mwah dat heb ik vaker ja dat ik dingen opnieuw aan het uitvinden ben :)
Maar dat vind ik het probleem met die MSDN, alles staat er in, maar de kunst is om het te vinden....
Moet wel ff goed kunnen formuleren wat je wil met juiste trefwoorden.

Maar ik zal er eens naar kijken.

Steam | SXQncyBhbGwgZ29vZCwgbWFuISDwn5iO


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:21

.oisyn

Moderator Devschuur®

Demotivational Speaker



je kunt toch gewoon je plugins registreren door een naam en creeer functie/interface mee te geven?

zoiets:

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// de interface
class PluginFactory
{
public:
    virtual Plugin * createPlugin () = 0;
};


// in je DLL:
class MyPlugin : public Plugin
{
    ...
};

class MyPluginFactory : public Plugin
{
public:
    Plugin * createPlugin ()
    {
        return new MyPlugin ();
    }
};

MyPluginFactory factory;


en dan moet je bij het laden van de DLL gewoon een functie aanroepen of een datastructure opzoeken waarin allemaal naam / factory combinaties staan

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.


  • Klippy
  • Registratie: Oktober 2000
  • Laatst online: 20:51

Klippy

Still Game

Topicstarter
Uuhm ja ik heb ff COM boek erbij gehaald, maar daar begin ik maar niet aan :P

Zal wel zelf wat fabriceren dan...

Steam | SXQncyBhbGwgZ29vZCwgbWFuISDwn5iO


  • Primal
  • Registratie: Augustus 2001
  • Laatst online: 28-08 07:31
LiquidSilver schreef op 19 November 2002 @ 15:56:

Klinkt alsof je de COM aan het heruitvinden bent check de documentatie van de IDispatch interface es, misschien dat je daar wat leuke idee'en uit kan halen (beter goed gejat dan slecht nagemaakt toch?!)
en ...
Uuhm ja ik heb ff COM boek erbij gehaald, maar daar begin ik maar niet aan :P

Zal wel zelf wat fabriceren dan...
Hehe, ik denk dat het op een misverstand berust. Yarvieh reageerde op de post van johnwoo. :)

"The fastest code, is the code that is never called."


Verwijderd

Primal schreef op 19 November 2002 @ 18:46:
Hehe, ik denk dat het op een misverstand berust. Yarvieh reageerde op de post van johnwoo. :)
Correct maar maakt het nog niet minder nuttig? Com is en blijft een goed idee ;)

  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 28-08 12:32

johnwoo

3S-GTE

Onze posts komen grotendeels op hetzelfde neer imho (daarom postte ik mijn vraag ook hier ipv een apart topic te openen ;) ), namelijk: hoe maak/lookup ik een object, gegeven een identifier (of dat nu een string, een nummertje of een GUID is).
.oisyn schreef op 19 november 2002 @ 15:56:

[...]


je kunt toch gewoon je plugins registreren door een naam en creeer functie/interface mee te geven?

zoiets:

[...]

en dan moet je bij het laden van de DLL gewoon een functie aanroepen of een datastructure opzoeken waarin allemaal naam / factory combinaties staan
Thanks, nuttige opmerking :) Ik zat zelf meer te denken aan één factory die de gewenste classes maakt, maar eentje per class kan natuurlijk ook. Het vraagt wel iets meer van de programmeur, maar dat moeten ze er maar voor over hebben :P

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:21

.oisyn

Moderator Devschuur®

Demotivational Speaker

nou ja ik weet niet helemaal hoe je systeem in elkaar zit, maar ik las iets over packages... dat kun je natuurlijk uitbreiden door in je package een methode te maken die de plugin naam als parameter heeft... op deze manier:

C++:
1
2
3
4
5
class Package
{
    ...
    virtual Plugin * createPlugin (const char * pluginNaam) = 0;
};


en in de implementatie van een Package ga je gewoon na welke plugin bij welke naam hoort, en vervolgens instantieer je de juiste

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.


  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 28-08 12:32

johnwoo

3S-GTE

.oisyn schreef op 19 november 2002 @ 20:26:
nou ja ik weet niet helemaal hoe je systeem in elkaar zit, maar ik las iets over packages... dat kun je natuurlijk uitbreiden door in je package een methode te maken die de plugin naam als parameter heeft... op deze manier:

C++:
1
2
3
4
5
class Package
{
    ...
    virtual Plugin * createPlugin (const char * pluginNaam) = 0;
};


en in de implementatie van een Package ga je gewoon na welke plugin bij welke naam hoort, en vervolgens instantieer je de juiste
Jah, dat had ik ook al verzonnen :)
Ergens in een vorige post:
Nu kan ik de plugin programmeur een overridable method 'CreatePlugin' geven in de CPackage class, die een string meekrijgt met de naam van de plugin die gecreate moet worden, en waarin de programmeur dan zelf de juist plugin instantieert en pointer teruggeeft. Maar het zou netter zijn als de Package zelf de plugins kan creeren en vernietigen op de juiste momenten.
Ik zit nog te twijfelen of ik het met een factory class per plugin, of met zo'n CreatePlugin method in de Package class ga doen... M'n huidige package class zoekt namelijk netjes alles zelf uit en hoeft dus niet gesubclasst te worden :)

Een simpele voorbeeld plugin class volgens het huidige model staat in dit topic: http://forum.winbar.nl/forum.php?thread=136#619

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:21

.oisyn

Moderator Devschuur®

Demotivational Speaker

ah ok, overheen gelezen :)

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.


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:14
johnwoo schreef op 19 November 2002 @ 20:22:
Onze posts komen grotendeels op hetzelfde neer imho (daarom postte ik mijn vraag ook hier ipv een apart topic te openen ;) ), namelijk: hoe maak/lookup ik een object, gegeven een identifier (of dat nu een string, een nummertje of een GUID is).
Vaak werkt std::map<identifier, factory> of std::map<identifier, prototype>
Hoe je die vult is een tweede.
Een variabele naam is in elk geval alleen voor de compiler, en geen bruikbare identifier.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Klippy
  • Registratie: Oktober 2000
  • Laatst online: 20:51

Klippy

Still Game

Topicstarter
Verwijderd schreef op 19 November 2002 @ 18:53:
[...]
Correct maar maakt het nog niet minder nuttig? Com is en blijft een goed idee ;)
Ja wat ik zag in dat COM boek bestaat daar wel ongeveer zoiets, maar dat schijnt nogal wat werk te zijn en dat is het denk ik niet waard.

Maar ik was voor mijn probleem maar iets aan t kloten met een Array van structs die ik gemaakt had met een CString en een UINT en dan loop ik maar Arraytje door totdat ik String van button heb geovenden en haal ik ID op uit array, maar dat ziet gewoon niet logisch uit. Voelt of ik alles dubbel doe.

Probleem is ook nog dat die functie niet weet welke buttons er op het form staan, dus kan nergens van uit gaan...


Dus daar ga ik morgen toch nog eens goed naar kijken...

Steam | SXQncyBhbGwgZ29vZCwgbWFuISDwn5iO


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Verwijderd schreef op 19 november 2002 @ 18:53:
COM is en blijft een goed idee ;)
Mag ik dit citeren tot in het eind der tijden? :Y)

Professionele website nodig?


Verwijderd

Euhhh even denken hoor *NEE*

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

te laat!

Professionele website nodig?


Verwijderd

LiquidSilver schreef op 19 november 2002 @ 10:28:
[...]


Hehe :P
Ja dat idee had ik ook al, maarja ik denk je weet maar nooit, ik heb de laatste tijd dingen gezien op MSDN waarvan ik dacht van "wow kan dat?" :)
Dus ik denk vraag het eens ;)

Maar bedankt dan ;)
Ik heb dan meestal zoiets van: "gadver kan dat"
Pagina: 1