I write my dll files in visual studio 2010.
The dll file (name fservice.dll), which has an external function, code write in c++ (VS2010, I have dll and lib files)
char * convert(char *)
I tested my fservice.dll in console application which called function in this dll. It was work fine. I have a problem when a write and tests in Postgrsql.
Dll file witch has c-function, who exports and imports to postgresql:
#include "postgres.h" #include "fmgr.h"
#include <windows.h>
#include <stdio.h>
typedef char* (__cdecl *MYPROC)(char * value);__declspec( dllexport ) PG_FUNCTION_INFO_V1(transform);
__declspec( dllexport ) 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);
}
else
PG_RETRUN_NULL();
/* * code */
PG_RETURN_TEXT_P(new_t);
}
I have a problem because, mod is doesn't exists. Path to dll file I check before write. Compile this c-function, and when i debug i saw it HINSTANCE hinstLib it wasn't created. It wasn't NULL or any value, It wasn't exist. Finally my c-function doesn't use my function form external dll.
How load dll and use my external function ?
My external function form dll and LoadLibrary() is not called by dll program with called by Postgresql, Why?
Przemek