From: | Przemek Lisowski <przemek(at)lisnet(dot)info> |
---|---|
To: | <pgsql-hackers(at)postgresql(dot)org> |
Subject: | C-function, don't load external dll file |
Date: | 2012-11-20 14:07:53 |
Message-ID: | c2742b8c486bda93bbab4fe098bd182e@lisnet.info |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
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
1 down
vote favorite [1]
1
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 *)
Dll
file witch has c-function, who exports and imports to 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); }
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?
Links:
------
[1]
http://stackoverflow.com/questions/13469028/postgresql-c-function-dont-load-external-dll-file#
From | Date | Subject | |
---|---|---|---|
Next Message | Przemek | 2012-11-20 14:16:03 | C-function, don't load external dll file |
Previous Message | Kohei KaiGai | 2012-11-20 14:05:21 | Re: [v9.3] writable foreign tables |