如何开始在Visual C ++中编写DLL?

时间:2013-09-06 09:30:30

标签: c++ visual-c++ visual-studio-2012 dll

正如标题所说,虽然我猜我的意思是“以后再使用它们。”

设置

我已经按照这个答案:

https://stackoverflow.com/a/13219631/696407

创建一个非常简单的dll

#include <stdio.h>
extern "C"
{
    __declspec(dllexport) void DisplayHelloFromMyDLL()
    {
        printf ("Hello DLL.\n");
    }
}

我现在有一个为发布而编译的dll:

  • DllTest.dll
  • DllTest.exp
  • DllTest.lib
  • DllTest.pdb

当我通过dumpbin运行DllTest.dll时,我找到了这一行:

1    0 00001000 DisplayHelloFromMyDLL = _DisplayHelloFromMyDLL

使用DLL

要在新解决方案中使用该功能,我相信我必须

  1. 以新解决方案启动项目
  2. 将DLL的位置添加到项目下
    • 属性
      • 配置属性
        • 链接
          • 一般
            • 其他图书馆目录
  3. 在。下添加.lib文件
    • 属性
      • 配置属性
        • 链接
          • 输入
            • 其他相关性
  4. 并且,在那里添加了.lib,下一步是......hvæt?

    我的代码现在:

    #include "stdafx.h"
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        while(1)
        {
            DisplayHelloFromMyDLL();
        }
        return 0;
    }
    

    但这不起作用。

    编辑:我猜“不行”是模糊的。该函数获得Error: identifier "DisplayHelloFromMyDLL" is undefined

    (旁边问题:我的功能是DisplayHelloFromMyDLL();还是_DisplayHelloFromMyDLL();?)

1 个答案:

答案 0 :(得分:0)

要使用你的.dll,你需要两件事,一个头文件和一个.lib。

头文件是这样的,编译器知道某处有一个名为DisplayHelloFromMyDLL()的函数。在这一点上它并不重要,只是你告诉编译器它在某个地方。链接器将处理where位。

.lib文件用于链接器。它告诉链接器DisplayHelloFromMyDLL()存在于.dll中,并且(在您的情况下)dll的名称是DllTest.dll。当程序启动时,Windows加载程序将使用此信息将.dll加载到您的进程中,并执行任何地址修正,以确保在您的应用程序中调用DisplayHelloFromMyDLL()调用.dll中的函数。

您实际上并不需要.dll来构建可执行文件,只是为了运行它。