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);
    }
    }

  • 相关阅读:
    PHP 实现定时任务的几种方法
    ueditor 文本编辑器
    CodeIgniter 如何去掉 Index.php
    php 后台权限例子 (mysql 数据表)
    php ajax 下拉加载数据
    Codeforces 931.D Peculiar apple-tree
    Codeforces 931.C Laboratory Work
    Codeforces 932.F Escape Through Leaf
    bzoj2325 [ZJOI2011]道馆之战
    bzoj3611 [Heoi2014]大工程
  • 原文地址:https://www.cnblogs.com/dqshll/p/1154675.html
Copyright © 2011-2022 走看看