From: hreba <hreba@t-online.de>
Subject: Plugin with controlled variable for initialization.
Date: Wed, 2 Feb 2022 18:21:03 +0100 [thread overview]
Message-ID: <j5vsrvF20plU1@mid.individual.net> (raw)
For the plugin scheme in my actual program I worked along the
corresponding gnat example, but while the original works, mine doesn't.
So I boiled it down to a minimum.
plugin.ads
----------
package Plugin is
procedure Empty;
end Plugin;
plugin.adb
----------
with Ada.Finalization;
with Ada.Text_IO;
package body Plugin is
type Life_Controller is new Ada.Finalization.Limited_Controlled with
null record;
overriding procedure Initialize (lc: in out Life_Controller);
overriding procedure Finalize (lc: in out Life_Controller);
procedure Empty is
begin
null;
end Empty;
overriding procedure Initialize (lc: in out Life_Controller) is
begin
Ada.Text_IO.Put_Line("Hello world!");
end Initialize;
overriding procedure Finalize (lc: in out Life_Controller) is
begin
Ada.Text_IO.Put_Line("Bye world!");
end Finalize;
lc: Life_Controller;
end Plugin;
main.adb
--------
with System;
with Interfaces.C.Strings;
with Ada.Text_IO;
procedure Main is
use type System.Address;
RTLD_LAZY: constant := 1;
handle: System.Address;
function dlopen (Lib_Name: String; Mode: Interfaces.C.int)
return System.Address;
pragma Import (C, dlopen, "dlopen");
begin
handle:= dlopen ("../Plugin/lib/libplugin.so" & ASCII.NUL, RTLD_LAZY);
if handle = System.Null_Address then
Ada.Text_IO.Put_Line("unable to load plugin");
end if;
end Main;
Main executes without any output. My understanding is the following:
- When plugin loading with dlopen fails, I get an error message.
- Otherwise, the controlled variable lc in plugin.adb comes to life and
I get an output from the Initialize procedure.
Where is my misconception?
--
Frank Hrebabetzky, Kronach +49 / 9261 / 950 0565
next reply other threads:[~2022-02-02 17:21 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-02 17:21 hreba [this message]
2022-02-02 18:05 ` Plugin with controlled variable for initialization Dmitry A. Kazakov
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox