我在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程序调用的,为什么?
答案 0 :(得分:0)
这可能是一个简单的答案,但我看不到的是创建函数调用。它会是这样的:
CREATE OR REPLACE FUNCTION transform(text) RETURNS text LANGUAGE C AS
'/path/to/dll', 'transform';
在你创建函数之前,PostgreSQL不知道动态加载dll ....