[Gambas-user] Sub and Function hijack ?? is this possible ?
olivier coquet
ocoquet at 3d-phenomen.fr
Wed Feb 17 09:31:27 CET 2021
Hello Brian,
Have you tried the code I sent and does it work for you?
What do you think about it?
friendship
Olivier C.
Le 17/02/2021 à 01:28, Brian G a écrit :
> It is trying to be dynamic with loaded classes on the fly, not bound
> at compile time
>
> The attached script gives a demo or what I think we are talking about.
> More like this example:
>
> class xx
> Public sub _Call()
> print "form"
> end
> Public sub MySub()
> Print "form MySub"
> end
> Public Sub _new()
> ' stuff
> end
> end class
>
> class yy
> Public sub _Call()
> print "sub form"
> end
> Public sub MySub()
> Print "sub form MySub"
> end
> Public sub _new()
> ' stuff
> end
> end class
>
> class vv
> Public sub _Call()
> print "Sub Sub Form"
> end
> Public sub MySub()
> Print "sub sub form MySub"
> end
> Public sub _new()
> 'stuff
> end
> end class
>
> 'Of course we could load a library or componant before creating an
> instance of the contained class'
>
> Public sub main()
> dim cButtons as new variant[]
> dim oNew as variant
> oNew = new xx
> cButtons.add(oNew)
> oNew = new yy
> cButtons.add(oNew)
> oNew = new vv
> cButtons.add(oNew)
>
> for each mButton as object in cButtons
> ' call the same interface for each class
> ' Using the same object or button assigned to the form
> mButton()
> mButton.MySub()
> next
>
> cButtons[1]()
> cButtons[1].MySub()
>
> ' mButton could be any object with the correct interface
> ' display form with plugin button or redefined button
>
>
> end
>
> Thank You
> Brian G
>
> ------------------------------------------------------------------------
> *From: *"Brian" <brian at westwoodsvcs.com>
> *To: *"Gambas mailing list" <user at lists.gambas-basic.org>
> *Sent: *Tuesday, February 16, 2021 4:19:49 PM
> *Subject: *Re: [Gambas-user] Sub and Function hijack ?? is this possible ?
>
> or like this:
>
>
>
> Thank You
> Brian G
>
> From: "Jeff P. Zacher" <adsicks at gmail.com>
> To: "Gambas mailing list" <user at lists.gambas-basic.org>
> Sent: Tuesday, February 16, 2021 11:42:50 AM
> Subject: Re: [Gambas-user] Sub and Function hijack ?? is this possible ?
>
> If I run this code:
> ' In Form1
> Public Sub Test()
> Print "form"
> End
>
>
> Public Sub Form_Open()
> Public sub _Call()
> print "form"
> end
>
> Public sub MySub()
> Print "form MySub"class xx
> end
>
> Public Sub _new()
> ' stuff
> end
>
> end class
>
> class yy
> Public sub _Call()
> print "sub form"
> end
>
> Public sub MySub()
> Print "sub form MySub"
> end
>
> Public sub _new()
> ' stuff
> end
>
> end class
>
> class vv
> Public sub _Call()
> print "Sub Sub Form"
> end
>
> Public sub MySub()
> Print "sub sub form MySub"
> end
>
> Public sub _new()
> 'stuff
> end
>
> end class
>
> Public sub main()
> dim cClasses as object[] 'get the classes instantiated
> cClasses.add(new xx) ' execute the init for each class
> cClasses.add(new yy)
> cClasses.add(new xx)
>
> for each mClass as object in cClasses
> mClass()
> mClass.MySub()
> next
>
>
> end
>
>
> Public sub _Call()
> print "form"
> end
>
> Public sub MySub()
> Print "form MySub"class xx
> end
>
> Public Sub _new()
> ' stuff
> end
>
> end class
>
> class yy
> Public sub _Call()
> print "sub form"
> end
>
> Public sub MySub()
> Print "sub form MySub"
> end
>
> Public sub _new()
> ' stuff
> end
>
> end class
>
> class vv
> Public sub _Call()
> print "Sub Sub Form"
> end
>
> Public sub MySub()
> Print "sub sub form MySub"
> end
>
> Public sub _new()
> 'stuff
> end
>
> end class
>
> Public sub main()
> dim cClasses as object[] 'get the classes instantiated
> cClasses.add(new xx) ' execute the init for each class
> cClasses.add(new yy)
> cClasses.add(new xx)
>
> for each mClass as object in cClasses
> mClass()
> mClass.MySub()
> next
>
>
> end
>
>
>
> Test()
>
> End
>
>
> ' In Class1
>
> Public Sub Test()
> Print "class"
> Endclass xxPublic sub _Call()
> print "form"
> end
>
> Public sub MySub()
> Print "form MySub"class xx
> end
>
> Public Sub _new()
> ' stuff
> end
>
> end class
>
> class yy
> Public sub _Call()
> print "sub form"
> end
>
> Public sub MySub()
> Print "sub form MySub"
> end
>
> Public sub _new()
> ' stuff
> end
>
> end class
>
> class vv
> Public sub _Call()
> print "Sub Sub Form"
> end
>
> Public sub MySub()
> Print "sub sub form MySub"
> end
>
> Public sub _new()
> 'stuff
> end
>
> end class
>
> Public sub main()
> dim cClasses as object[] 'get the classes instantiated
> cClasses.add(new xx) ' execute the init for each class
> cClasses.add(new yy)
> cClasses.add(new xx)
>
> for each mClass as object in cClasses
> mClass()
> mClass.MySub()
> next
>
>
> end
>
>
>
> Public sub _Call()
> print "form"
> end
>
> Public sub MySub()Public sub _Call()
> print "form"
> end
>
> Public sub MySub()
> Print "form MySub"class xx
> end
>
> Public Sub _new()
> ' stuff
> end
>
> end class
>
> class yy
> Public sub _Call()
> print "sub form"
> end
>
> Public sub MySub()
> Print "sub form MySub"
> end
>
> Public sub _new()
> ' stuff
> end
>
> end class
>
> class vv
> Public sub _Call()
> print "Sub Sub Form"
> end
>
> Public sub MySub()
> Print "sub sub form MySub"
> end
>
> Public sub _new()
> 'stuff
> end
>
> end class
>
> Public sub main()
> dim cClasses as object[] 'get the classes instantiated
> cClasses.add(new xx) ' execute the init for each class
> cClasses.add(new yy)
> cClasses.add(new xx)
>
> for each mClass as object in cClasses
> mClass()
> mClass.MySub()
> next
>
>
> end
>
>
>
> Print "form MySub"
> end
>
> Public Sub _init()
> ' stuff
> end
>
> end class
>
> class yy
> Public sub _Call()
> print "sub form"
> end
> Public sub _Call()
> print "form"
> end
>
> Public sub MySub()
> Print "form MySub"class xx
> end
>
> Public Sub _new()
> ' stuff
> end
>
> end class
>
> class yy
> Public sub _Call()
> print "sub form"
> end
>
> Public sub MySub()
> Print "sub form MySub"
> end
>
> Public sub _new()
> ' stuff
> end
>
> end class
>
> class vv
> Public sub _Call()
> print "Sub Sub Form"
> end
>
> Public sub MySub()
> Print "sub sub form MySub"
> end
>
> Public sub _new()
> 'stuff
> end
>
> end class
>
> Public sub main()
> dim cClasses as object[] 'get the classes instantiated
> cClasses.add(new xx) ' execute the init for each class
> cClasses.add(new yy)
> cClasses.add(new xx)
>
> for each mClass as object in cClasses
> mClass()
> mClass.MySub()
> next
>
>
> end
>
>
>
> Public sub MySub()
> Print "sub form MySub"
> end
>
> Public sub _init()
> ' stuff
> end
>
> end class
>
> class vv
> Public sub _Call()
> print "Sub Sub Form"
> end
>
> Public sub MySub()
> Print "sub sub form MySub"
> end
>
> Public sub _init()
> 'stuff
> end
>
> end class
>
> Public sub main()
> dim cClasses as object[] 'get the classes instantiated
> cClasses.add(new xx) ' execute the init for each class
> cClasses.add(new yy)
> cClasses.add(new xx)
>
> for each mClass as object in cClasses
> mClass()
> mClass.MySub()
> next
>
>
> end sub
>
> end
>
>
>
>
> Thank You
> Brian G
>
> From: "Jeff P. Zacher" <adsicks at gmail.com>
> To: "Gambas mailing list" <user at lists.gambas-basic.org>
> Sent: Tuesday, February 16, 2021 11:42:50 AM
> Subject: Re: [Gambas-user] Sub and Function hijack ?? is this possible ?
>
> If I run this code:
> ' In Form1
> Public Sub Test()
> Print "form"
> End
>
>
> Public Sub Form_Open()
>
> Test()
>
> End
>
>
> ' In Class1
>
> Public Sub Test()
> Print "class"
> End
> ' stuff
> end
>
> end class
>
> class yy
> Public sub _Call()
> print "sub form"
> end
>
> Public sub MySub()
> Print "sub form MySub"
> end
>
> Public sub _init()
> ' stuff
> end
>
> end class
>
> class vv
> Public sub _Call()
> print "Sub Sub Form"
> end
>
> Public sub MySub()
> Print "sub sub form MySub"
> end
>
> Public sub _init()
> 'stuff
> end
>
> end class
>
> Public sub main()
> dim cClasses as object[] 'get the classes instantiated
> cClasses.add(new xx) ' execute the init for each class
> cClasses.add(new yy)
> cClasses.add(new xx)class xx
> Public sub _Call()
> print "form"
> end
>
> Public sub MySub()
> Print "form MySub"
> end
>
> Public Sub _init()
> ' stuff
> end
>
> end class
>
> class yy
> Public sub _Call()
> print "sub form"
> end
>
> Public sub MySub()
> Print "sub form MySub"
> end
>
> Public sub _init()
> ' stuff
> end
>
> end class
>
> class vv
> Public sub _Call()
> print "Sub Sub Form"
> end
>
> Public sub MySub()
> Print "sub sub form MySub"
> end
>
> Public sub _init()
> 'stuff
> end
>
> end class
>
> Public sub main()
> dim cClasses as object[] 'get the classes instantiated
> cClasses.add(new xx) ' execute the init for each class
> cClasses.add(new yy)
> cClasses.add(new xx)
>
> for each mClass as object in cClasses
> mClass()
> mClass.MySub()
> next
>
>
> end sub
>
> end
>
>
>
>
> Thank You
> Brian G
>
> From: "Jeff P. Zacher" <adsicks at gmail.com>
> To: "Gambas mailing list" <user at lists.gambas-basic.org>
> Sent: Tuesday, February 16, 2021 11:42:50 AM
> Subject: Re: [Gambas-user] Sub and Function hijack ?? is this possible ?
>
> If I run this code:
> ' In Form1
> Public Sub Test()
> Print "form"
> End
>
>
> Public Sub Form_Open()
>
> Test()
>
> End
>
>
> ' In Class1
>
> Public Sub Test()
> Print "class"
> Endclass xx
> Public sub _Call()
> print "form"
> end
>
> Public sub MySub()
> Print "form MySub"
> end
>
> Public Sub _init()
> ' stuff
> end
>
> end class
>
> class yy
> Public sub _Call()
> print "sub form"
> end
>
> Public sub MySub()
> Print "sub form MySub"
> end
>
> Public sub _init()
> ' stuff
> end
>
> end class
>
> class vv
> Public sub _Call()
> print "Sub Sub Form"
> end
>
> Public sub MySub()
> Print "sub sub form MySub"
> end
>
> Public sub _init()
> 'stuff
> end
>
> end class
>
> Public sub main()
> dim cClasses as object[] 'get the classes instantiated
> cClasses.add(new xx) ' execute the init for each class
> cClasses.add(new yy)
> cClasses.add(new xx)
>
> for each mClass as object in cClasses
> mClass()
> mClass.MySub()
> next
>
>
> end sub
>
> end
>
>
>
>
> Thank You
> Brian G
>
> From: "Jeff P. Zacher" <adsicks at gmail.com>
> To: "Gambas mailing list" <user at lists.gambas-basic.org>
> Sent: Tuesday, February 16, 2021 11:42:50 AM
> Subject: Re: [Gambas-user] Sub and Function hijack ?? is this possible ?
>
> If I run this code:
> ' In Form1
> Public Sub Test()
> Print "form"
> End
>
>
> Public Sub Form_Open()
>
> Test()
>
> End
>
>
> ' In Class1
>
> Public Sub Test()
> Print "class"
> End
>
> for each mClass as object in cClasses
> mClass()
> mClass.MySub()
> next
>
>
> end sub
>
> end
>
>
>
>
> Thank You
> Brian G
>
> ------------------------------------------------------------------------
> *From: *"Jeff P. Zacher" <adsicks at gmail.com>
> *To: *"Gambas mailing list" <user at lists.gambas-basic.org>
> *Sent: *Tuesday, February 16, 2021 11:42:50 AM
> *Subject: *Re: [Gambas-user] Sub and Function hijack ?? is this possible ?
>
> If I run this code:
>
> ' In Form1
>
> Public Sub Test()
>
> Print "form"
>
> End
>
>
> Public Sub Form_Open()
>
> Test()
>
> End
>
>
> ' In Class1
>
> Public Sub Test()
>
> Print "class"
>
> End
>
> I get the following output:
>
> form
>
> What am I missing? This is what I would expect.
>
>
> If you want to overload, just create a class that inherts a form class
> and overload it....
>
>
> On 2/15/21 10:58 AM, Brian G wrote:
>
> Are you adding dynamic classes as plugins? Not sure when this
> would be needed? Or are you defining classes on the fly in you code?
>
> Would be interesting to know how your using it!
>
> It is a simple way of writing once and basically having a sort of
> self modifying code. That is any module or class can change the
> actual destination of a call without the main process knowing
> about it.
>
>
> Thank You
> Brian G
>
> ------------------------------------------------------------------------
> *From: *"olivier coquet" <ocoquet at 3d-phenomen.fr>
> *To: *"Gambas mailing list" <user at lists.gambas-basic.org>
> *Sent: *Monday, February 15, 2021 5:35:10 AM
> *Subject: *Re: [Gambas-user] Sub and Function hijack ?? is this
> possible ?
>
> Le 14/02/2021 à 21:44, Jussi Lahtinen a écrit :
>
>
>
> On Sun, Feb 14, 2021 at 10:05 AM olivier coquet
> <ocoquet at 3d-phenomen.fr <mailto:ocoquet at 3d-phenomen.fr>> wrote:
>
> Le 13/02/2021 à 20:45, Christof Thalhofer a écrit :
>
> Am 13.02.21 um 09:08 schrieb olivier coquet:
>
> A question to specialists, is it possible to hijack a procedure or
> function?
> Let me explain:
> in my FMain class, I have a procedure:
>
> public sub maprocédure()
>
> This "é" should nor be allowed in the name of a symbol.
>
> print "toto"
> end sub
>
> in a maclasse class, I have a second procedure:
> public sub maprocédure()
> print "titi"
> end sub
>
> I would like that during a call: maprocédure() in the FMain class, it is
> the one of the maclasse class that runs and not the one of FMain.
>
> Is this possible?
> and how?
>
> No. The only possibility is that in Fmail you call
> this: maclasse.maprocedure()
>
> Hello Christof and thank you for your answer.
>
> As I'm French, I'm stubborn :)
> So I dug a little bit into the problem and I found a solution.
>
> Just declare a public variable (*varfct*) of type object in fmain and initialize it with "Me".
> In Fmain we call the procedure in this way:
>
> /varfct.maprocedure()/
>
> In the main() of the class added next, I change the value of*varfct* by "Me" (the one of the new class), and it's done, the call changes destination without changing the main() code.
>
> Not very elegant but it works.
>
> Friendship
> Olivier Coquet
>
> Translated withwww.DeepL.com/Translator <http://www.DeepL.com/Translator> (free version)
>
>
> I don't quite understand what you are trying to achieve, but
> "Me" can refer to any class (here FMain or maclasse).
> So, even when your variable name stays the same (varfct), you
> are essentially doing the same as this:
>
> FMain.maprocedure
> maclasse.maprocedure
>
> or perhaps more enlightingly:
>
> Dim hObj as object
>
> hObj = FMain
> hObj.maprocedure
>
> hObj = maclasse
> hObj.maprocedure
>
>
> Jussi
>
> Hi jussi,
>
> Thank you for your response,
> To answer your question, I have been working for 3 months on a
> home automation project that involves the use of several elements.
> The first one, an http server that is simple to implement and that
> integrates perfectly with a gambas program has been made as a
> gambas component (see my messages about this) is perfectly
> operational.
> The second one is the main program that takes care of the
> management of the connected objects, the scenarios and the launch
> schedule of each scenario is also operational (well almost, still
> some bugs).
> The third one is a system that would allow to add functions at
> will to the main program without rewriting it.
> It is on this last point that I am working on, a plugin system
> that installs itself and joins the main program. To do this, I use
> a component that I made in a special way.
> Its functions:
> - Able to create new buttons on the interface of the main program.
> - Manage these buttons.
> - To be able to substitute its own functions and procedures to
> those of the main program without modifying it.
> - Do not disturb the main program if the plugin is not installed.
>
> Hence my last question and the answer I gave there this weekend
> So my plugin system is now operational, if someone is interested,
> I can send the sources of a test plugin and the sources of an
> example program implementing it.
>
> Friendship
> Olivier COQUET
>
>
> Translated with www.DeepL.com/Translator (free version)
>
>
>
> ----[ http://gambaswiki.org/wiki/doc/netiquette ]----
>
> ----[http://gambaswiki.org/wiki/doc/netiquette ]----
>
>
>
> ----[ http://gambaswiki.org/wiki/doc/netiquette ]----
>
>
> ----[ http://gambaswiki.org/wiki/doc/netiquette ]----
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.gambas-basic.org/pipermail/user/attachments/20210217/7929da92/attachment-0001.htm>
More information about the User
mailing list