[英]Postgresql C-function, don't load external dll file
我在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调用了,为什么?
这可能是一个简单的答案,但是我看不到是create函数调用。 就像这样:
CREATE OR REPLACE FUNCTION transform(text) RETURNS text LANGUAGE C AS
'/path/to/dll', 'transform';
在创建函数之前,PostgreSQL不知道动态加载dll。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.