zoukankan      html  css  js  c++  java
  • Windows C++ 导出和导入纯DLL函数(非COM)总结

    Windows C++ 导出和导入纯DLL函数(非COM)总结

    多年以前由于DLL hell 问题人们很少在直接从dll文件导出函数并且直接使用,但是有时候事情的解决方案不是我们可以选择的,今天在解决一个问题的时候,还是不得已选择了一个这样的方式。但是搜索了一下,网上关于这个问题的总结文章都写的不是很全,于是总结出来,希望对大家有所帮助。

    静态导入和动态导入加起来一共三种方式

    静态导入 --需要将 .lib文件和.dll文件copy到执行目录

    1. dllexport导出 dllimport导入。

    导出时这样写:

    __declspec( dllexport ) void func(void){}

    导入时这样写:

    __declspec( dllimport ) void func(void);

     

    2. .def文件导出dllimport导入。

    关于.def的说明:

    .def 文件是包含一个或多个描述 DLL 各种属性的 Module 语句的文本文件。如果不使用 __declspec(dllexport) 关键字导出 DLL 的函数,则 DLL 需要 .def 文件。.def 文件必须至少包含下列模块定义语句:

    文件中的第一个语句必须是 LIBRARY 语句。此语句将 .def 文件标识为属于 DLLLIBRARY 语句的后面是 DLL 的名称。链接器将此名称放到 DLL 的导入库中。

    EXPORTS 语句列出名称,可能的话还会列出 DLL 导出函数的序号值。通过在函数名的后面加上 @ 符和一个数字,给函数分配序号值。当指定序号值时,序号值的范围必须是从 1 N,其中 N DLL 导出函数的个数。

     

    动态导入--需要将.dll文件copy到执行目录

    3. LoadLibrary()GetProcAddress()FreeLibrary() 惯用法。

    示例代码:

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

     

  • 相关阅读:
    0309. Best Time to Buy and Sell Stock with Cooldown (M)
    0621. Task Scheduler (M)
    0106. Construct Binary Tree from Inorder and Postorder Traversal (M)
    0258. Add Digits (E)
    0154. Find Minimum in Rotated Sorted Array II (H)
    0797. All Paths From Source to Target (M)
    0260. Single Number III (M)
    0072. Edit Distance (H)
    0103. Binary Tree Zigzag Level Order Traversal (M)
    0312. Burst Balloons (H)
  • 原文地址:https://www.cnblogs.com/pugang/p/2758812.html
Copyright © 2011-2022 走看看