DLL的创建导出和加载

Posted sheenagh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DLL的创建导出和加载相关的知识,希望对你有一定的参考价值。

一、创建DLL项目

  打开VS2008,点击File——>New——>Project——>Visual C++——>Win32 Console Application,填入工程名称,下一步,选择Application Type为DLL,Additional options为Empty project。

  添加cpp文件和h文件,实现DLL需求的功能。、

  点击生成解决方案,可在对应目录下看到生成的lib和dll文件。

二、DLL的函数导出和加载

  DLL导出有两种方式:__declspec(dllexport)和.def文件。c++加载DLL也有两种方式(静态链接和动态链接)。

1、用__declspec(dllexport)导出函数  

  #ifdef XXX_EXPORTS
    #define XXX_API __declspec(dllexport)
  #else
    #define XXX_API __declspec(dllimport)
  #endif

  extern "C" BOOL XXX_API XXX(函数参数列表);

2、用.def导出函数

  LIBRARY "xxx"(DLL的名称)
  EXPORTS
    xxx(要导出的函数名)

3、静态链接

  #pragma comment(lib,"xxx.lib")

  

4、动态链接

  typedef BOOL (*XXXFun)(参数列表);

加载:

  HMODULE hModule = LoadLibrary(_T("XXX.dll"));
  if(NULL != hModule)
  {
    XXXFun funCreateObject = (XXXFun)GetProcAddress(hModule,"CreateObject");
    if(funCreateObject != NULL)
    {

      ...

    }

  }
  else
  {
    perror("funCreateObject失败");
    FreeLibrary(hModule);
  }

  静态链接的时候不关心函数的导出函数名字,只有动态链接的时候才会关心函数的导出名字。调用函数的时候一定要注意调用约定,不然会导致程序崩溃。

三、DLL的使用

  创建一个新的Win32控制台项目或其他,设置C/C++和Linker相关项。

 

以上是关于DLL的创建导出和加载的主要内容,如果未能解决你的问题,请参考以下文章

MFC Dll 导出函数

如何在程序中用显式加载的方式使用DLL中的导出类

ThinkPHP 做的导出功能提示加载期间错误如下图,求高手解答急急急:

使用引用项目中已有程序集的 dll

Delphi - 使用转发导出创建 DLL

定位Dll加载异常的方法