close Warning: Can't synchronize with repository "(default)" (/var/svn/tolp does not appear to be a Subversion repository.). Look in the Trac log for more information.

Version 3 (modified by Víctor de Buen Remiro, 15 years ago) (diff)

--

Librerías C++ built-in TOL de enlace dinámico

Las librerías de enlace dinámico en TOL permiten la carga de objetos y funciones creados en C++ para implementar tareas específicas que resulten demasiado lentas en TOL y no sean lo suficientemente generalizables como para formar parte de las utilidades globales del núcleo de TOL.

Carga de librerías C++ built-in TOL

La función built-in de TOL

  NameBlock LoadDynLib(Text libraryPath) 

devuelve un NameBlock métodos y miembros escritos en C++ en una librería previamente compilada para su enlace dinámico. Una vez cargado el Nameblock no tiene nada de particular y puede ser usado como cualquier otro creado en el propio lenguaje TOL.

Uso de librerías C++ built-in TOL dentro de paquetes

No es posible crear un paquete de forma directa pero sí se puede usar como un miembro dentro de un paquete, adjuntándolo como recurso externo e incluyendo la llamada dentro del método StartActions.

NameBlock MyPackage =
[[

  ...

  //At creation time is initialized as trivial NameBlock
  NameBlock Tools = [[ Real _unused]];

  ...

  Set _.autodoc.nonTolResources = { [[
    Set CrossPlatform = { [[ 
       Text cpp="cpp" 
    ]] }

  ...

  Real StartActions(Real void)
  {
    NameBlock Tools  := LoadDynLib("cpp/tools.dll");

    ...

  };
]];

Creación de librerías C++ built-in TOL

/*
  TOL Dynamic Library
  <NAME>.cpp
  Purpose: ...
*/

#define LOCAL_NAMEBLOCK _local_nameblock_

static BUserNameBlock* _local_unb_ = new BGraContensP<BNameBlock>("", new BNameBlock);
static BNameBlock& _local_nameblock_ = _local_unb_->Contens();

//Entry point of library returns the NameBlock to LoadDynLib
//This is the only one exported function 
BUserNameBlock* get_local_unb_<NAME>()
{
  return(_local_unb_);
}

//Internal operator declaration
DeclareContensClass(...)
DefIntOpr(...)

//External operator declaration
DeclareContensClass(...)
DefExtOpr(...)

//Member declaration
DeclareLocalMember(<TYPE>, <MEMBER_NAME>, <MEMBER_DESCRIPTION>, <MEMBER>)