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

olivier coquet ocoquet at 3d-phenomen.fr
Mon Feb 15 14:35:10 CET 2021


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)

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.gambas-basic.org/pipermail/user/attachments/20210215/47ce7792/attachment.htm>


More information about the User mailing list