C-function, don't load external dll file

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#

Responses

Browse pgsql-hackers by date

  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