zoukankan      html  css  js  c++  java
  • About DLL

    动态连接库的两种方式?
    答:调用一个DLL中的函数有两种方法:
    1.载入时动态链接(load-time dynamic linking),模块非常明确调用某个导出函数
    ,使得他们就像本地函数一样。这需要链接时链接那些函数所在DLL的导入库,导入库向
    系统提供了载入DLL时所需的信息及DLL函数定位。
    2.运行时动态链接(run-time dynamic linking),运行时可以通过LoadLibrary或Loa
    dLibraryEx函数载入DLL。DLL载入后,模块可以通过调用GetProcAddress获取DLL函数的
    出口地址,然后就可以通过返回的函数指针调用DLL函数了。如此即可避免导入库文件了

    FARPROC GetProcAddress(
      HMODULE hModule,
      LPCSTR lpProcName
    );
    该函数输入dll的handler hModule 和 函数的名字lpProcName.
    返回一个函数指针,供调用. 见下面的例子.

    typedef UINT (CALLBACK* LPFNDLLFUNC1)(DWORD,UINT);
    ...
    HINSTANCE hDLL;               // Handle to DLL
    LPFNDLLFUNC1 lpfnDllFunc1;    // Function pointer
    DWORD dwParam1;
    UINT  uParam2, uReturnVal;
    hDLL = LoadLibrary("MyDLL");
    if (hDLL != NULL)
    {
    lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL,
    "DLLFunc1");
    if (!lpfnDllFunc1)
    {
    // handle the error
    FreeLibrary(hDLL);
    return SOME_ERROR_CODE;
    }
    else
    {
    // call the function
    uReturnVal = lpfnDllFunc1(dwParam1, uParam2);
    }
    }

  • 相关阅读:
    istio-流量管理-基于不同版本访问规则控制
    k8s安装istio
    策略模式
    递归思想
    Java Lambda 表达式
    redis实现分布式锁
    MySQL 的优化方案总结
    linux下查看某一端口被哪个进程占用
    组合模式
    桥接模式
  • 原文地址:https://www.cnblogs.com/dqshll/p/1154675.html
Copyright © 2011-2022 走看看