CPP

标准C/C++的DLL编写

首先,你要确定你要导出那些个函数,然后你就在你要导出的函数名前加上下面一句话:

    // 输出函数的前缀
    #define  DLL_EXPORT   extern "C" __declspec( dllexport )

    DLL_EXPORT VOID  ExportFun()
    {
        ...
    }

  是不是很简单啊。如果你要导出整个类或者全局变量,你需要这样做:

// 输出类的前缀
#define  DLL_CLASS_EXPORT   __declspec( dllexport )

// 输出全局变量的前缀
#define  DLL_GLOBAL_EXPORT   extern __declspec( dllexport )

 完成了这些以后,我们就要在主程序中调用这些个函数了,用下面的方法:

    HINSTANCE hInst = NULL;
    hInst = LoadLibrary("*.dll");        // 你的DLL文件名

     if (!hInst)
    {
        MessageBox(hWnd,"无法加载 *.Dll ","Error",MB_OK);
    }

    还记得上面我声明的那个ExportFun()函数吗?我不能直接得到那个函数,但是可以把那个函数的地址取出来。其实函数地址使用起来和函数是一样的。只不过,为了使用方便,需要定义一个函数指针的类型。如果要指向上面的那个ExportFun(),则它的函数指针的类型定义如下:

    typedef void (CALLBACK* LPEXPORTFUN)(void)

    之后需要做的是声明一个指针,然后得到DLL中ExportFun()的地址。GetProcAddress函数的第一个参数是之前得到的DLL的实例句柄,后面一个是DLL中那个函数的函数名。
      
    LPEXPORTFUN pFun = NULL;
    LPEXPORTFUN pFun = (LPEXPORTFUN)GetProcAddress(hInst, "ExportFun");

好了,到这里已经就要大功告成了,还差最后一步,调用那个函数:

pFun();

大功告成!!