例: カスタム C++ ライブラリの作成

www.altova.com このトピックを印刷 前のページ 1つ上のレベル 次のページ

ホーム >  関数 > Java、C# および C++ ライブラリを手動で参照する >

例: カスタム C++ ライブラリの作成

このトピックでは MapForce ライブラリウィンドウに表示されるように、サンプル C++ ライブラリの作成方法と、 .mff ファイルの構成方法について説明されています。

 

1.ヘッダー (.h) ファイルをクラスライブラリのために作成します。 以下のコードリストは 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

 

関数は静的として宣言されており、名前空間 altova がインポートされています。ALTOVA_DECLSPECIFIER をクラス名の前に書き込んでください。これにより、動的または静的なリンケージの使用に関わらず、次に生成されるコード内でクラスが正確にコンパイルされます。

 

2..cpp ヘッダーファイルと同じ名前のファイルを作成します。.cpp ファイルは、 .h ファイルと同じディレクトリに存在する必要があります。次のコード リスティングは、前に作成された Greetings.h ファイルを含む、Greetings.cpp と呼ばれるサンプル .cpp ファイルを示しています:

 

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

 

StdAfx.h と一部の Altova ライブラリをインポートするラインに注意してください。 これらのラインは、変更されてはなりません。ライブラリへのパスは正確です。生成されたコード内では、これらのパスはそれぞれのファイルを指します。

 

Java または C# と対象的に、ソース C++ ファイルをコンパイルする必要はありません。ファイルは生成されたコードにコピーされ、生成されたマッピングコードの残りと共にコンパイルされます。

 

3.XML エディターを使用して、 新規 .mff ファイルを作成し、 ..\Program Files\MapForceLibraries\mff.xsd フォルダーに対して検証します。下でハイライトされているテキストが、前に作成されたヘッダーと cpp ファイルのディレクトリを指していることを確認してください。 .mff ファイルの構成で説明されている通り、ここで定義されている名前空間と関数名、およびデータの型は、 C++ コードに対応している必要があります。データ型へのサポートに関する詳細は、次を参照してください: データ型のマッピング

 

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

 

カスタムライブラリおよび MapForce を適応する .mff ファイルが作成されました。 カスタム .mff ファイルを MapForce 内で使用することができます (次を参照してください: .mff ファイルを MapForce にインポートする)。ネイティブの C++ ライブラリを使用するマッピングを実行するには、 C++ コードを生成し、 C++ コードまたはアプリケーションから実行する必要があります。

 

RC++ コンパイルエラーが発生した場合

以下の行でコンパイラーエラーが発生した場合、msado15.DLL へのパスを追加してください。

 

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

 

Visual Studio 2008:

 

1.ツール | オプション..」を選択します。
2.「プロジェクトおよびソリューション」の「VC++ ディレクトリ」タブを展開します。
3.ディレクトリを表示するプロジェクトのプルダウンから「インクルードファイル」を選択します。 msado15.dll ファイルは以下で見つけることができます (通常 C:\Program Files\Common Files\System\ADO)。
4.再度ビルドを行います。

(C) 2019 Altova GmbH