2012-11-20 2 views
1

내가 비주얼 스튜디오에서 내 DLL 파일을 작성 외부 DLL 파일을로드하지 않습니다 2010PostgreSQL을 C-기능,

DLL 파일 외부 기능을 가지고있다 (이름 fservice.dll), C 코드 쓰기 ++ (VS2010, 나는 PostgreSQL을에 DLL과 LIB 파일)

char * convert(char *) 

DLL 파일 마녀 C-기능을 가지고, 수출과 수입이 있습니다

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); 
} 

, 모드가 존재하지 않기 때문에 나는 문제가 . 쓰기 전에 dll 파일의 경로를 확인합니다. 이 c-function을 컴파일하고, 디버깅 할 때 HINSTANCE hinstLib을 보았을 때 생성되지 않았다. NULL이 아니거나 값이 아니 었습니다. 존재하지 않았습니다. 마지막으로 내 c-function은 내 함수 형식 external dll을 사용하지 않습니다.

어떻게 dll을로드하고 외부 기능을 사용합니까?

외부 함수 형식 dll과 LoadLibrary()가 dll 프로그램에 의해 호출되지 않고 Postgresql에 의해 호출됩니다. 이유는 무엇입니까?

+1

이 디버깅 할 수 있습니다에서 LoadLibrary 및 검사 :이 같은 일 것입니다 프로젝트를 찾을 위치? – Rob

+0

[tag : C++]의 [tag : visual-studio-2010]을 [tag : c]와 (과) 교환 했으므로 태그로 필터링하는 사람들에게 추가적인 힌트를 제공합니다. –

+0

Postgresql에 의해 호출 된 dll 프로그램에서 LoadLibrary()가 호출되지 않았습니다. – pl65

답변

0

이것은 간단한 대답 일지 모르지만 필자가 볼 수없는 것은 create function call입니다. 파일 오른쪽에있는 경우

CREATE OR REPLACE FUNCTION transform(text) RETURNS text LANGUAGE C AS 
'/path/to/dll', 'transform'; 

당신이 함수를 만들 때까지, PostgreSQL을 동적으로 DLL을로드 모르는 ....