Beispiel: Erstellen einer benutzerdefinierten C++-Bibliothek

www.altova.com Dieses Kapitel drucken Vorherige Seite Eine Ebene nach oben Nächste Seite

Startseite >  Funktionen > Manuelles Referenzieren von Java, C# und C++-Bibliotheken >

Beispiel: Erstellen einer benutzerdefinierten C++-Bibliothek

In diesem Kapitel wird beschrieben, wie Sie eine C++-Beispielbibliothek erstellen und die .mff-Datei so konfigurieren, dass sie im Fenster "Bibliotheken" von MapForce angezeigt wird.

 

1.Erstellen Sie eine Header (.h)-Datei für Ihre Klassenbibliothek. Im folgenden Codefragment sehen Sie eine Beispiel-Header-Datei namens Greetings.h.

 

  #ifndef HELLOWORLDLIBRARY_GREETINGS_H_INCLUDED
  #define HELLOWORLDLIBRARY_GREETINGS_H_INCLUDED
 
  #if _MSC_VER > 1000
    #pragma once
  #endif // _MSC_VER > 1000
 
  using namespace altova;
 
  namespace helloworld {
 
  class ALTOVA_DECLSPECIFIER Greetings
  {
  public:
    static string_type   HelloFunctionResponse(bool greetingType);
  };
 
  } // namespace HelloWorldLibrary
 
  #endif // HELLOWORLDLIBRARY_GREETINGS_H_INCLUDED

 

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

 

2.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 helloworld {
 
    string_type   Greetings::HelloFunctionResponse(bool greetingType)
    {
        if( greetingType )        
          return _T("Hello World!");
        return _T("Hello User!");
    }
 
  }

 

Beachten Sie die Zeilen, in denen StdAfx.h und eine Reihe weiterer Altova-Bibliotheken importiert werden. Diese Zeilen dürfen nicht geändert werden. Die Pfade zu den Altova-Bibliotheken sind korrekt; im generierten Code verweisen diese Pfade 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.

 

3.Erstellen Sie mit Hilfe eines XML-Editors eine neue .mff-Datei und validieren Sie diese anhand des Ordners ..\Programme\MapForceLibraries\mff.xsd. Stellen Sie sicher, dass der unten markierte Text auf das Verzeichnis des Headers und der zuvor erstellten cpp-Dateien verweist. 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="helloworld" 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="helloworld"/>
        <setting name="class" value="Greetings"/>
        <setting name="path" value="C:\Projects\HelloWorld"/>
        <setting name="include" value="Greetings.h"/>
        <setting name="source" value="Greetings.cpp"/>
    </implementation>
  </implementations>
  <group name="Greetings">
    <component name="HelloFunctionResponse">
        <sources>
          <datapoint name="greeting_type" type="xs:boolean"/>
        </sources>
        <targets>
          <datapoint name="result" type="xs:string"/>
        </targets>
        <implementations>
          <implementation language="cpp">
              <function name="HelloFunctionResponse"/>
          </implementation>
        </implementations>
        <description>
          <short>result = hello(greeting_type)</short>
          <long>Returns a greeting according to the given greeting type.</long>
        </description>
    </component>
  </group>
</mapping>

 

Sie haben nun eine fertige benutzerdefinierte Bibliothek und die .mff-Datei für die Anpassung dieser an MapForce. Die benutzerdefinierte .mff-Datei kann nun in MapForce verwendet werden (siehe Importieren der .mff-Datei in MapForce). Denken Sie daran, dass Sie C++-Code generieren und das Mapping über Ihren C++-Code oder Ihre Applikation ausführen müssen, um Mappings, in denen native C++-Bibliotheken verwendet werden, ausführen zu können.

 

Beheben von C++-Kompilierungsfehlern

Wenn Sie in der unten stehenden Zeile einen Kompilierungsfehler erhalten, ändern Sie die Projekteigenschaften, um eine Referenz zur Datei msado15.dll zu inkludieren.

 

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

 

In Visual Studio 2008:

 

1.Klicken Sie im Menü Extras auf Optionen.
2.Erweitern Sie Projekte und Projektmappen > VC++-Verzeichnisse.
3.Wählen Sie unter "Verzeichnisse anzeigen für:" Includedateien und fügen Sie einen neuen Eintrag hinzu, der auf das Verzeichnis, in dem sich die Datei msado15.dll befindet, verweist (normalerweise, C:\Programme\Gemeinsame Dateien\System\ADO).
4.Erstellen Sie das Projekt.

© 2019 Altova GmbH