• LoadLibrary


    Win32 Dyanmic-Link Library的调用LoadLibrary    
    关键点

    LoadLibrary

    The LoadLibrary function maps the specified executable module into the address space of the calling process.

    For additional load options, use the LoadLibraryEx function.

    HMODULE LoadLibrary(

      LPCTSTR lpFileName   // file name of module

    );

    GetProcAddress

    The GetProcAddress function retrieves the address of the specified exported dynamic-link library (DLL) function.

    FARPROC GetProcAddress(

      HMODULE hModule,   // handle to DLL module

      LPCSTR lpProcName   // function name

    );

    FreeLibrary

    The FreeLibrary function decrements the reference count of the loaded dynamic-link library (DLL). When the reference count reaches zero, 

    the module is unmapped from the address space of the calling process and the handle is no longer valid.

     

    BOOL FreeLibrary(

      HMODULE hModule   // handle to DLL module

    );

     

     

    实现过程

     

    1.新建1个 MFC AppWizard(exe)项目,Project name:MFC01

    2.选中Dialog Base对话框类型的程序。

    3.删除多余的控件,添加1个按钮,编译一下。

    4.将project01 Debug里面的project01.dll复制到MFC01的Debug目录下

    5.调用dll代码如下

    void CMfc01Dlg::OnButton1() 
    {
        HMODULE hModule=LoadLibrary("project01.dll");
        typedef int (*Function)(int x,int y);
        if (hModule)
        {
            Function Fuc=(Function)GetProcAddress(hModule,"add");
            if (Fuc)
            {
                CString s;
                s.Format("3+1=%d",Fuc(3,1));
                MessageBox(s);
            }
            FreeLibrary(hModule);   
        }  
     

       

     

    备注

     
    注:LoadLibrary与只能调用 DLL 里面带 extern "C"的
    ADDPROC是一个变量
    ADDPROC SUB= (ADDPROC)GetProcAddress(hModule,"sub");
     
    如果调用Windows的Dll
    typedef int (*Function)(int x,int y);修改为
    typedef int (WINAPI *Function)(int x,int y);
     
    本例的DLL代码
     
    1.创建1个 Win32 Dyanmic-Link Library ,Project name:project01
    2.选中 An empty DLL project.
    3.Ctrl+N 新建一个 C++ Source File ,File:project01
    Win32 Dyanmic-Link Library的创建

    extern "C" __declspec(dllexport) int add(int x,int y)
    {
        return x+y;
    }
    extern "C" __declspec(dllexport) int sub(int x,int y)
    {
        return x-y;
    }

     

    相关链接

    部分API无法直接使用需要调用系统DLL里面的API                           

     

     




    附件列表

    • 相关阅读:
      前端知识之JavaScript内容(一)
      前端2css层叠样式表
      前端:html初识以及标签
      css
      python--re模块(正则表达式)
      python--xml模块
      关于导包问题
      前端浅了解
      试写仿优酷系统坑点
      sqlalchemy
    • 原文地址:https://www.cnblogs.com/xe2011/p/2923671.html
    Copyright © 2020-2023  润新知