Postgresql C函数,不加载外部dll文件

时间:2012-11-20 08:16:45

标签: c database visual-studio-2010 postgresql dll

我在visual studio 2010中编写了我的dll文件。

dll文件(名称为fservice.dll),它有一个外部函数,用c ++写的代码(VS2010,我有dll和lib文件)

char * convert(char *)

dll文件女巫有c函数,谁输出和导入postgresql:

typedef char* (__cdecl *MYPROC)(char * value); 

PG_FUNCTION_INFO_V1(transform);

Datum
transform (PG_FUNCTION_ARGS)
{
  HINSTANCE hinstLib= LoadLibrary("fservice.dll"); 
  char * pointer;
  text *t = PG_GETARG_TEXT_P(0);

  if (hinstLib != NULL) 
  { 

      ProcAdd = (MYPROC) GetProcAddress(hinstLib, "convert");
      pointer=ProcAdd("text");
      FreeLibrary(hinstLib); 
  }

  /*
   * code 
   */

  PG_RETURN_TEXT_P(new_t);
}

我有一个问题,因为mod不存在。我在写之前检查的dll文件的路径。 编译这个c函数,当我调试我看到它HINSTANCE hinstLib它没有创建。它不是NULL或任何值,它不存在。最后我的c函数不使用我的函数形式外部dll。

如何加载dll并使用我的外部功能?

我的外部函数形式dll和LoadLibrary()不是由postgresql调用的dll程序调用的,为什么?

1 个答案:

答案 0 :(得分:0)

这可能是一个简单的答案,但我看不到的是创建函数调用。它会是这样的:

CREATE OR REPLACE FUNCTION transform(text) RETURNS text LANGUAGE C AS
'/path/to/dll', 'transform';

在你创建函数之前,PostgreSQL不知道动态加载dll ....