Exemple : Référencer C++ dans .mff
Cet exemple vous montre comment créer une bibliothèque C# d'échantillon et la référencer à un fichier MapForce Function File (.mff). Le fichier .mff peut ensuite être importé en tant que bibliothèque MapForce.
Étapes de configuration
Pour référencer une bibliothèque C++ dans un fichier .mff, suivez les instructions ci-dessous.
Étape 1 : Créer un fichier d’en-tête
Créer un fichier d'en-tête (.h) pour votre bibliothèque de classe. La liste de code suivante illustre un fichier d'échantillon d'en-tête appelé 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
Veuillez noter que la fonction a été déclarée comme étant statique, et que l'espace de noms altova est importé. Ne pas oublier d'écrire ALTOVA_DECLSPECIFIER devant le nom de classe : cela garantit que vos classes compileront correctement, que vous utilisiez des liens dynamiques ou statiques dans le code généré.
Étape 2 : Créer un fichier .cpp
Créer un fichier .cpp portant le même nom que le fichier d'en-tête. Le fichier .cpp doit se trouver dans le même répertoire que le fichier .h. La liste de code suivante illustre un fichier d'échantillon .cpp appelé Greetings.cpp qui contient le fichier Greetings.h créé précédemment :
#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!");
}
}
Veuillez noter les lignes qui importent le StdAfx.h et plusieurs bibliothèques Altova. Ces lignes ne doivent pas être modifiées. Si les chemins menant aux bibliothèques Altova sont correctes dans le code généré, ces chemins pointeront vers les fichiers respectifs. Contrairement à Java ou C#, vous ne devez pas compiler vos fichiers source C++. Ils seront copiés dans le code généré et seront compilés avec le reste du code de mappage généré.
Étape 3 : Créer un .mff et référencer votre bibliothèque C++
En utilisant un éditeur XML, créer un nouveau fichier .mff et valider le par rapport au schéma suivant : C:\Program Files\MapForceLibraries\mff.xsd. Veuillez vous assurer que les espaces de noms, noms de fonction ainsi que les types de données définis ici correspondent à ceux contenus dans le code C++, comme décrit dans Configurer le fichier .mff. Pour information sur la prise en charge des types de données, voir Mappage de type de données.
<?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>
Étape 4 : Importer le fichier .mff en tant que bibliothèque
Maintenant que notre bibliothèque personnalisée est référencée dans le fichier .mff, vous pouvez importer le fichier .mff dans MapForce en tant que bibliothèque. Pour plus d’information, voir Importer le fichier .mff.
Erreurs de compilation C++
Afin de pouvoir exécuter des mappages qui utilisent des bibliothèques C++ natives, vous devrez générer du code C++ et exécuter le mappage depuis votre code C++ ou votre application, comme décrit dans Générer code C++. S vous recevez une erreur de compliation dans #import "msado15.dll" rename("EOF", "EndOfFile"), modifiez les propriétés de projet pour inclure une référence à msado15.dll dans C:\Program Files\Common Files\System\ADO.