私は1つの関数を持つDLLを持っています
#include "postgres.h"
#include <string.h>
#include "fmgr.h"
#ifdef PG_MODULE_MAGIC
PG_MODULE_MAGIC;
#endif
PG_FUNCTION_INFO_V1(add_one_float8);
Datum
add_one_float8(PG_FUNCTION_ARGS)
{
float8 arg = PG_GETARG_FLOAT8(0);
PG_RETURN_FLOAT8(arg + 1.0);
}
関数を作成しようとすると:
CREATE FUNCTION add_one(double precision) RETURNS double precision
AS 'DIRECTORY\mylib.dll', 'add_one_float8'
LANGUAGE C STRICT;
「エラー: 関数 "add_one_float8" が見つかりませんでした」というエラーが表示されますが、"pg_finfo_add_one_float8" で作成スクリプトが正常に終了しました。
関数名の前に「pg_finfo_」を追加するのは普通ですか、それとも間違っていますか?
PostgreSQL バージョン 9.1
ありがとうございました。
アップデート:
メイクファイル
PG_DIR=D:/Programs/PostgreSQL
PG_LIB=$(PG_DIR)/lib/postgres.lib
PG_INCLUDE_SERVER=$(PG_DIR)/include/server
PG_INCLUDE=$(PG_DIR)/include
PG_INCLUDE_PORT_WIN32=$(PG_DIR)/include/server/port/win32
PG_INCLUDE_PORT_WIN32_MSVC=$(PG_DIR)/include/server/port/win32_msvc
MSDK_INCLUDE="D:\Program Files\Microsoft SDKs\Windows\v7.0\Include"
COMPILER_INCLUDES=/I$(PG_INCLUDE) /I$(PG_INCLUDE_SERVER) /I $(PG_INCLUDE_PORT_WIN32) /I$(PG_INCLUDE_PORT_WIN32_MSVC) /I$(MSDK_INCLUDE)
LINKER_DLL_FLAGS=/MACHINE:X86
COMPILER_DLL_FLAGS=/c /TC /D "WIN32"
DLL_NAME=mylib
DLL_DEST=D:\lib
OBJS=myfunc.obj
.c.obj:
cl $(COMPILER_DLL_FLAGS) $(COMPILER_INCLUDES) $*.c
all:$(OBJS)
link -out:$(DLL_DEST)\$(DLL_NAME).dll /DLL $(OBJS) $(PG_LIB)