Referenzieren von C++ in .mff
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.