Altova MapForce 2024 Professional Edition

Este apartado explica cómo se puede crear una biblioteca C++ y hacer referencia a ella desde un archivo archivo de función de MapForce (.mff) para que esa biblioteca aparezca en la ventana Bibliotecas de MapForce.

 

Configuración

Siga estos pasos para hacer referencia a una biblioteca C++ en un archivo .mff:

 

Paso 1. Crear un archivo de encabezado

Cree un archivo de encabezado (.h) para su biblioteca de clases. Por ejemplo, a continuación puede ver un ejemplo de archivo de encabezado llamado Greetings.h.

 

#ifndef MYLIBRARY_GREETINGS_H_INCLUDED
#define MYLIBRARY_GREETINGS_H_INCLUDED
 
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
 
using namespace altova;
 
namespace mylib {
 
class ALTOVA_DECLSPECIFIER Greetings
{
  public:
   static string_type SayHello(bool isMorning);
};
 
} // namespace mylib
 
#endif // MYLIBRARY_GREETINGS_H_INCLUDED

 

Observe que la función se declaró como estática y que el espacio de nombres altova se importa. Recuerde que debe escribir ALTOVA_DECLSPECIFIER delante del nombre de clase para que las clases se compilen correctamente (tanto si usa vínculos dinámicos o estáticos en el código que genere más adelante).

 

Paso 2. Crear un archivo .cpp

Cree un archivo .cpp que se llame igual que el archivo de encabezado. El archivo .cpp debe estar en el mismo directorio que el archivo .h. Por ejemplo, a continuación puede ver un ejemplo de archivo .cpp llamado Greetings.cpp que incluye el archivo Greetings.h que creamos en el primer paso.

 

#include "StdAfx.h"
#include "../Altova/Altova.h"
#include "../Altova/AltovaException.h"
#include "../Altova/SchemaTypes.h"
 
#include "Greetings.h"
 
namespace mylib {
 
  string_type Greetings::SayHello(bool isMorning)
  {
     if( isMorning )        
        return _T("Good morning!");
     return _T("Good day!");
  }
}

 

Fíjese en las líneas que importan el archivo StdAfx.h y varias bibliotecas de Altova. Estas líneas no se deben modificar. Las rutas de acceso de las bibliotecas de Altova son correctas. En el código que se generará estas rutas de acceso dirigirán a los archivos pertinentes. A diferencia de Java y C#, en C++ no es necesario compilar los archivos de origen C++. Se copiarán en el código generado y se compilarán con el resto del código de asignación.

 

Paso 3. Crea el archivo .mff y hacer referencia a su biblioteca C++

En un editor XML cree un archivo .mff nuevo y valídelo con el esquema C:\Program Files\MapForceLibraries\mff.xsd. Recuerde que el espacio de nombres y los nombres de función y los tipos de datos aquí definidos deben corresponderse con los del código C++ tal y como se explica en el apartado Configurar el archivo .mff. Para más información sobre los tipos de datos consulte Correspondencias entre tipos de datos.

 

<?xml version="1.0" encoding="UTF-8"?>
<mapping version="9" library="mylib" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="mff.xsd">
  <implementations>
     <implementation language="cpp">
        <setting name="namespace" value="mylib"/>
        <setting name="class" value="Greetings"/>
        <setting name="path" value="C:\Libraries\cpp"/>
        <setting name="include" value="Greetings.h"/>
        <setting name="source" value="Greetings.cpp"/>
     </implementation>
  </implementations>
  <group name="greetings">
     <component name="sayhello">
        <sources>
           <datapoint name="ismorning" type="xs:boolean"/>
        </sources>
        <targets>
           <datapoint name="result" type="xs:string"/>
        </targets>
        <implementations>
           <implementation language="cpp">
              <function name="SayHello"/>
           </implementation>
        </implementations>
        <description>
           <short>result = sayhello(ismorning)</short>
           <long>Returns "Good morning" or "Good day", depending on the input parameter.</long>
        </description>
     </component>
  </group>
</mapping>

 

Paso 4. Importar .mff como biblioteca

Ahora que el archivo .mff hace referencia a su biblioteca personal puede importarlo en MapForce como biblioteca.Para más información véase Importar bibliotecas .mff.

 

Resolver errores de compilación C++

Recuerde que, para poder ejecutar asignaciones que usan bibliotecas C++ nativas, deberá generar código C++ y ejecutar la asignación desde el código o aplicación C++, como se explica en Generar código C++. Si recibe un error de compilador en esta línea:

 

 #import "msado15.dll" rename("EOF", "EndOfFile")

 

modifique las propiedades del proyecto para incluir una referencia al archivo msado15.dll en C:\Program Files\Common Files\System\ADO.

 

© 2017-2023 Altova GmbH