1

Visual Studio 2010 で dll ファイルを作成しています。

外部関数を持つdllファイル(名前fservice.dll)は、c ++でコードを記述します(VS2010、dllおよびlibファイルがあります)

char * convert(char *)

DLL file witch には c-function があり、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 プログラムによって呼び出されません。なぜですか?

4

1 に答える 1

0

これは簡単な答えかもしれませんが、私が見ていないのは create 関数呼び出しです。次のようになります。

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

関数を作成するまで、PostgreSQL は dll を動的にロードすることを知りません....

于 2013-04-13T08:02:50.707 に答える