GEOS Init

GEOS 初期化

geos_cライブラリを使用する際には、必ずinitGEOS()関数を呼び出し、終了したらfinishGEOS()関数を呼び出すようにとあります。

initGEOS()関数は情報出力用関数とエラー出力用関数へのポインタ2つを引数に要求しています。
引数のGEOSMessageHandler型は以下のように定義されています。

typedef void (*GEOSMessageHandler)(const char *fmt, ...);

ので、大体以下のようにするといいと思われます。

#include "c:mingwincludegeos_c.h"
#include <stdio.h>
#include <stdarg.h>

void ConsoleOutput( const char *fmt, ... )
{
	va_list ap;

	va_start( fmt, ap );

	vprintf( fmt, ap );
	fprintf( stderr, "n" );

	va_end( ap );
}

void ConsoleErrorOutput( const char *fmt, ... )
{
	va_list ap;

	va_start( fmt, ap );

	vfprintf( stderr, fmt, ap );
	fprintf( stderr, "n" );

	va_end( ap );
}

int main( int argc, char *argv[] )
{
	initGEOS( ConsoleOutput, ConsoleErrorOutput );
	
	// 何か適当な処理

	finishGEOS();

	return 0;
}

ちなみに、「必ずこの2つを呼べ」という割には、initGEOS()はメッセージ系の関数を定義しているだけ、finishGEOS()は何もしていません。

v3.3では、initGEOS()ではおそらく内部で使用するものと思われるコンテキストハンドルなるものを初期化しています。
finishGEOS()はそれを開放しています。

アーカイブ