[Gambas-user] Sub and Function hijack ?? is this possible ?

Jeff P. Zacher adsicks at gmail.com
Tue Feb 16 20:42:50 CET 2021


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 ]----
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.gambas-basic.org/pipermail/user/attachments/20210216/f5159831/attachment.htm>


More information about the User mailing list