| Version 3 (modified by , 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>)
