HINSTANCE hLib=LoadLibrary("被选中的库名");
(FARPROC&)func1=GetProcAddress(hLib,"想调用的函数名");
当然func1是函数指针变量了。
如所选的库不再需要,应调用FreeLibrary(hLib)以释放资源 

解决方案 »

  1.   

    完全同意FBStudio.
    通过不同的函数指针来实现调用不同库的同一函数.
    其实调用函数就是把指令指针指向该函数的起始地址.
      

  2.   

    至于选择哪个DLL,可以放在配置文件中,或放在注册表中。要不然,在程序中用一个提示对话框也行。
      

  3.   

    我的处理方案是这样的:
    进入程序前先将用户定义的DLL拷贝自己定义的DLL,调用。
    下次进入程序时如用户没作选择,则调用缺省的。否则将用户选定的DLL拷贝一份。
      

  4.   

    FBStudio:可否给个详细例子?例外,如何传递参数?
      

  5.   

    //下面的例子调用user32.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;
    }
      

  6.   

    AK47QUAKE的意思只是让用户可以自己选择DLL吗.这和在不同的语言中调用不同的资源DLL原理是一样.你可以看看这方面的文章.
      

  7.   

    最好把此DLL作成ActiveX DLL, 这样用户选择以后,使用:dim do as object
    set do = createobject("mydll.myobj" & txtUserSelect)do.func1
    do.func2
    ...