HINSTANCE hLib=LoadLibrary("被选中的库名");
(FARPROC&)func1=GetProcAddress(hLib,"想调用的函数名");
当然func1是函数指针变量了。
如所选的库不再需要,应调用FreeLibrary(hLib)以释放资源
(FARPROC&)func1=GetProcAddress(hLib,"想调用的函数名");
当然func1是函数指针变量了。
如所选的库不再需要,应调用FreeLibrary(hLib)以释放资源
通过不同的函数指针来实现调用不同库的同一函数.
其实调用函数就是把指令指针指向该函数的起始地址.
进入程序前先将用户定义的DLL拷贝自己定义的DLL,调用。
下次进入程序时如用户没作选择,则调用缺省的。否则将用户选定的DLL拷贝一份。
//这些函数的原型可参看MSDN#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers#include <windows.h>int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
HWND (WINAPI*lpfnGetDesktopWindow)()=NULL;
BOOL (WINAPI*lpfnGetWindowRect)(HWND,LPRECT)=NULL;
HDC (WINAPI*lpfnGetWindowDC)(HWND)=NULL;
int (WINAPI*lpfnFillRect)(HDC,LPRECT,HBRUSH)=NULL;
int (WINAPI*lpfnReleaseDC)(HWND,HDC)=NULL; HINSTANCE hLib=LoadLibrary("user32.dll");
if (hLib==NULL) return 1; (FARPROC&)lpfnGetDesktopWindow=GetProcAddress(hLib,"GetDesktopWindow");
(FARPROC&)lpfnGetWindowRect=GetProcAddress(hLib,"GetWindowRect");
(FARPROC&)lpfnGetWindowDC=GetProcAddress(hLib,"GetWindowDC");
(FARPROC&)lpfnFillRect=GetProcAddress(hLib,"FillRect");
(FARPROC&)lpfnReleaseDC=GetProcAddress(hLib,"ReleaseDC"); HWND hwnd=(*lpfnGetDesktopWindow)();
RECT rect;
(*lpfnGetWindowRect)(hwnd,&rect);
HDC hdc=(*lpfnGetWindowDC)(hwnd);
(*lpfnFillRect)(hdc,&rect,(HBRUSH)(COLOR_ACTIVECAPTION+1));
(*lpfnReleaseDC)(hwnd,hdc);
return 0;
}
set do = createobject("mydll.myobj" & txtUserSelect)do.func1
do.func2
...