Altova MapForce 2024 Enterprise Edition

In diesem Beispiel wird gezeigt, wie Sie eine C++-Beispielbibliothek erstellen und in einer MapForce Function File (.mff) referenzieren. Diese .mff-Datei kann anschließend als MapForce-Bibliothek importiert werden.

 

Konfigurationsschritte

Um eine C++-Bibliothek in einer .mff-Datei zu referenzieren, gehen Sie vor, wie unten beschrieben.

Schritt 1. Erstellen einer Header-Datei

Erstellen Sie eine Header (.h)-Datei für Ihre Klassenbibliothek. Im folgenden Codefragment sehen Sie eine Beispiel-Header-Datei namens 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

 

Beachten Sie, dass die Funktion als statisch deklariert wurde und dass der Namespace altova importiert wird. Vor den Klassennamen muss ALTOVA_DECLSPECIFIER gesetzt werden, damit Ihre Klassen - unabhängig davon, ob Sie im danach generierten Code dynamische oder statische Verknüpfungen verwenden, korrekt kompiliert werden können.

 

Schritt 2. Erstellen einer .cpp-Datei

Erstellen Sie eine .cpp-Datei mit demselben Namen wie die Header-Datei. Die .cpp-Datei muss sich im selben Verzeichnis wie die .h-Datei befinden. Im folgenden Codefragment sehen Sie eine .cpp-Beispieldatei namens Greetings.cpp, die die zuvor erstellte Datei Greetings.h inkludiert:

 

#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!");
  }
}

 

Beachten Sie die Zeilen, in denen StdAfx.h und eine Reihe weiterer Altova-Bibliotheken importiert werden. Diese Zeilen dürfen nicht geändert werden. Wenn die Pfade zu den Altova-Bibliotheken im generierten Code korrekt sind, verweisen sie auf die entsprechenden Dateien. Im Gegensatz zu Java oder C# müssen Sie Ihre C++-Quelldateien nicht kompilieren. Sie werden in den generierten Code kopiert und mit dem restlichen generierten Mapping-Code kompiliert.

 

Schritt 3. Erstellen der .mff-Datei und Referenzieren Ihrer C++-Bibliothek

Erstellen Sie mit Hilfe eines XML-Editors eine neue .mff-Datei und validieren Sie diese anhand des Schemas C:\Programme\MapForceLibraries\mff.xsd. Der Namespace und die Funktionsnamen und Datentypen, die hier definiert sind, müssen, wie unter Konfigurieren der .mff-Datei beschrieben, mit denen im C++-Code übereinstimmen. Nähere Informationen dazu finden Sie unter Datentyp-Zuordnung.

 

<?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>

 

Schritt 4. Importieren der .mff-Datei als Bibliothek

Nachdem Sie Ihre benutzerdefinierte Bibliothek in der .mff-Datei referenziert haben, können Sie die .mff-Datei nun als Bibliothek in MapForce importieren. Nähere Informationen finden Sie unter Importieren der .mff-Datei.

 

C++-Kompilierungsfehler

Um Mappings, in denen native C++-Bibliotheken verwendet werden, ausführen zu können, müssen Sie C++-Code generieren und das Mapping über Ihren C++-Code oder Ihre C++-Applikation ausführen, siehe Generieren von C++-Code. Wenn Sie in #import "msado15.dll" rename("EOF", "EndOfFile") einen Kompilierungsfehler erhalten, ändern Sie die Projekteigenschaften, um eine Referenz auf msado15.dll in C:\Programme\Common Files\System\ADO zu inkludieren.

 

© 2018-2024 Altova GmbH