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 2 (modified by Víctor de Buen Remiro, 15 years ago) (diff)

--

Carga de librerías de enlace dinámico en TOL

La función built-in de TOL

  NameBlock LoadDynLib(Text libraryPath) 

permite 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. Devuelve un NameBlock en lugar de objetos globales para poder mantener los requisitos de modularidad.

Uso 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 =
[[

  ...

  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 de enlace dinámico en TOL

/*
  <NAME>.cpp
  TOL Dynamic Library
  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>)