C-function, don't load external dll file - Mailing list pgsql-hackers

From Przemek Lisowski
Subject C-function, don't load external dll file
Date
Msg-id c2742b8c486bda93bbab4fe098bd182e@lisnet.info
Whole thread Raw
Responses Re: C-function, don't load external dll file  (Dimitri Fontaine <dimitri@2ndQuadrant.fr>)
List 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

 

 

 

 

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?

pgsql-hackers by date:

Previous
From: "Albe Laurenz"
Date:
Subject: Re: [v9.3] writable foreign tables
Next
From: Boszormenyi Zoltan
Date:
Subject: Re: [PATCH] Make pg_basebackup configure and start standby [Review]