1

我在 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() 不是由 dll 程序调用的,而是由 Postgresql 调用的,为什么?

4

1 回答 1

0

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

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

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

于 2013-04-13T08:02:50.707 回答