BUT, our system architect is a stickler about not polluting the global
namespace, so can I export from Ada to a C++ namespace? Perhaps
something like (though this won't compile on my Green Hills compiler):
C++ Side:
namespace My_Wrapper {
extern int First_Val;
extern int Next_Val;
}
Ada Side:
First_Val : constant integer := Some_Withed_In_Named_Number;
pragma Export(CPP, First_Val, "My_Wrapper::First_Val");
Next_Val : constant integer := First_Val'Succ;
pragma Export(CPP, Next_Val, "My_Wrapper::Next_Val");
Any help would be much appreciated, even if it's just a "You can't do
that"!
Thanks
Jeremy
> I'm supporting a large mass of legacy Ada and my boss wants to add new
> functions using C++.
This is the problem, do not fix the code, fix your boss :)
Pascal.
--
--|------------------------------------------------------
--| Pascal Obry Team-Ada Member
--| 45, rue Gabriel Peri - 78114 Magny Les Hameaux FRANCE
--|------------------------------------------------------
--| http://perso.wanadoo.fr/pascal.obry
--| "The best way to travel is by means of imagination"
--|
--| gpg --keyserver wwwkeys.pgp.net --recv-key C1082595
Find out how the C++ compiler mangles the C++ name to the link name;
it may be something like My_Wrapper@Next_Val, but it's probably
worse. Then use the Link_Name parameter of Export to specify that link
name.
As Pascal said, it would be better to fix your boss!
--
-- Stephe
The problem is you don't know how the compiler mangles names.
What I would do is use extern but with C linkage, e.g.
extern "C" {
extern int My_Wrapper_First_Val;
extern int My_Wrapper_Next_Val;
}
or something like that.
I'm not sure external linkage and C++ namespaces are really compatible.
If you really want to keep the namespace, you could try something like:
namespace My_Wrapper {
int First_Val();
int Next_Val();
}
inline int My_Wrapper::First_Val()
{
return My_Wrapper_First_Val;
}
inline int My_Wrapper::Next_Val()
{
return My_Wrapper_Next_Val;
}
or something like that.