分享

标准C/C++的DLL编写

 imelee 2017-09-25

DLL也就是动态链接库,使用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();

大功告成!!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多