win32.c

来自「postgresql8.3.4源码,开源数据库」· C语言 代码 · 共 86 行

C
86
字号
/* $PostgreSQL: pgsql/src/backend/port/dynloader/win32.c,v 1.9 2006/12/04 22:23:40 momjian Exp $ */#include "postgres.h"char	   *dlerror(void);int			dlclose(void *handle);void	   *dlsym(void *handle, const char *symbol);void	   *dlopen(const char *path, int mode);static char last_dyn_error[512];static voidset_dl_error(void){	DWORD		err = GetLastError();	if (FormatMessage(FORMAT_MESSAGE_IGNORE_INSERTS |					  FORMAT_MESSAGE_FROM_SYSTEM,					  NULL,					  err,					  MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT),					  last_dyn_error,					  sizeof(last_dyn_error) - 1,					  NULL) == 0)	{		snprintf(last_dyn_error, sizeof(last_dyn_error) - 1,				 "unknown error %lu", err);	}}char *dlerror(void){	if (last_dyn_error[0])		return last_dyn_error;	else		return NULL;}intdlclose(void *handle){	if (!FreeLibrary((HMODULE) handle))	{		set_dl_error();		return 1;	}	last_dyn_error[0] = 0;	return 0;}void *dlsym(void *handle, const char *symbol){	void	   *ptr;	ptr = GetProcAddress((HMODULE) handle, symbol);	if (!ptr)	{		set_dl_error();		return NULL;	}	last_dyn_error[0] = 0;	return ptr;}void *dlopen(const char *path, int mode){	HMODULE		h;	int			prevmode;	/* Disable popup error messages when loading DLLs */	prevmode = SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX);	h = LoadLibrary(path);	SetErrorMode(prevmode);	if (!h)	{		set_dl_error();		return NULL;	}	last_dyn_error[0] = 0;	return (void *) h;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?