如何在Visual Studio 2010中使用DEF文件从现有C ++代码生成DLL

豪尔赫·阿雷瓦洛(Jorge Arevalo)

我继承了一个C ++项目,并且需要在DLL中对其进行转换,以便在其他项目中使用它。

该代码在Visual Studio 2010解决方案中有框架。我可以编译它并生成一个DLL文件,但是没有关联的lib文件。我不是Windows开发人员,但是似乎我需要导出要使用的功能,并且有两种方法:

第一种选择意味着要在我要导出的每个类或函数前面手动添加__declspec(ddlexport)。由于有很多类,而且我无法控制将要与该库链接的所有应用程序,因此第二个选项(DEF文件)看起来更有希望。

有什么方法可以从现有的DLL文件生成DEF文件吗?我尝试了不同的解决方案:

  • 使用expdef它只是崩溃而没有任何信息。
  • 使用dumpbin我没有看到函数名称。只是这个:

    档案类型:DLL

    概括

        1000 .data
        2000 .idata
       18000 .rdata
        5000 .reloc
        1000 .rsrc
       98000 .text
       48000 .textbss
    

而已。我想这意味着我什么也没汇出。但是,这正是我想要做的。我该怎么做?

艾略特·伍兹(Elliot Woods)

在反复遇到这个问题几年后,我今天找到了一个解决方案。这有点骇人听闻,但实际上可能是使用Visual Studio的最佳方法。

由于您不想导出所有可能的符号(特别是因为DLL本身可能包含大型静态库),并且您无法使用要使用的符号来编辑文件(对我来说,因为它们是第三方库)必须将其静态链接以遵循其使用模式),而DEF是最佳解决方案。

如果我们有:

  • 应用程式(EXE)
  • 库(DLL)
  • 库具有.DEF文件,这意味着在构建时,.DEF中列出的符号将导出到库.DLL中,并在.LIB文件中列出。
  • .DEF文件为空
  • 应用程序链接库的LIB文件

现在建立!

好的,我们收到很多链接器错误... 链接器错误

现在转到“输出”选项卡,请注意,在输出文本中的每个链接器错误行的末尾是符号名称:

链接器错误文本

我们可以创建一个小脚本,使用每行的最后一个“单词”,将其删除,然后将其放入您的DEF文件中。而且有效!

就像我说的那样,这有点不客气(因为您最终只会看到当时应用程序使用的符号)。但是实际上,由于您不想导出所有内容,并且可能需要库中的符号以静态方式链接到该库,因此这可能是解决此问题的最准确方法。

(注意:在我看来,这主要是试图使插件DLL可以访问应用程序EXE中的符号的问题)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Visual Studio 2010中使用DEF文件从现有C ++代码生成DLL

来自分类Dev

如何在Visual Studio 2010中部署没有dll文件的项目

来自分类Dev

如何在Visual Studio 2010中使用C#加载rpt文件?

来自分类Dev

如何在 Visual Studio 代码中合并文件(区分)

来自分类Dev

如何在Visual Studio中忽略DLL中的断点

来自分类Dev

如何在Visual Studio中包含IrdaClient.dll

来自分类Dev

如何在Visual Studio中生成Object(.obj)文件

来自分类Dev

如何在Visual Studio 2010中使用互斥锁

来自分类Dev

如何在Ubuntu 16.04中卸载Visual Studio代码

来自分类Dev

如何在Visual Studio代码中运行gulp任务?

来自分类Dev

Visual Studio如何在我的代码中运行?

来自分类Dev

如何在Visual Studio Code的代码段中替换变量?

来自分类Dev

如何在Visual Studio代码中打开2个窗口?

来自分类Dev

如何在Visual Studio代码中缩小该图?

来自分类Dev

如何在Visual Studio代码中替换多个单词

来自分类Dev

如何在Visual Studio中获得“缩小”的代码视图?

来自分类Dev

如何在Visual Studio 2005中从源代码打开项目

来自分类Dev

如何在Debian 8.7中安装Visual Studio代码?

来自分类Dev

如何在Visual Studio Code中更改代码格式

来自分类Dev

如何在Visual Studio中更改默认的生成输出目录?

来自分类Dev

如何在Visual Studio中获取TFS生成反馈

来自分类Dev

如何在C ++中的Visual Studio 2010中添加.a文件

来自分类Dev

如何在Visual Studio 2010中使用.log文件创建安装文件

来自分类Dev

如何在 Visual Studio 代码中使用键盘在文件夹之间切换?

来自分类Dev

dll在Visual Studio 2010中使用问题

来自分类Dev

dll在Visual Studio 2010中使用问题

来自分类Dev

Visual Studio代码:如何在所有文件中实际搜索和替换单词?

来自分类Dev

如何在Android Studio中编辑getter的代码生成

来自分类Dev

如何在Visual Studio中的项目之间共享C ++源代码文件?

Related 相关文章

  1. 1

    如何在Visual Studio 2010中使用DEF文件从现有C ++代码生成DLL

  2. 2

    如何在Visual Studio 2010中部署没有dll文件的项目

  3. 3

    如何在Visual Studio 2010中使用C#加载rpt文件?

  4. 4

    如何在 Visual Studio 代码中合并文件(区分)

  5. 5

    如何在Visual Studio中忽略DLL中的断点

  6. 6

    如何在Visual Studio中包含IrdaClient.dll

  7. 7

    如何在Visual Studio中生成Object(.obj)文件

  8. 8

    如何在Visual Studio 2010中使用互斥锁

  9. 9

    如何在Ubuntu 16.04中卸载Visual Studio代码

  10. 10

    如何在Visual Studio代码中运行gulp任务?

  11. 11

    Visual Studio如何在我的代码中运行?

  12. 12

    如何在Visual Studio Code的代码段中替换变量?

  13. 13

    如何在Visual Studio代码中打开2个窗口?

  14. 14

    如何在Visual Studio代码中缩小该图?

  15. 15

    如何在Visual Studio代码中替换多个单词

  16. 16

    如何在Visual Studio中获得“缩小”的代码视图?

  17. 17

    如何在Visual Studio 2005中从源代码打开项目

  18. 18

    如何在Debian 8.7中安装Visual Studio代码?

  19. 19

    如何在Visual Studio Code中更改代码格式

  20. 20

    如何在Visual Studio中更改默认的生成输出目录?

  21. 21

    如何在Visual Studio中获取TFS生成反馈

  22. 22

    如何在C ++中的Visual Studio 2010中添加.a文件

  23. 23

    如何在Visual Studio 2010中使用.log文件创建安装文件

  24. 24

    如何在 Visual Studio 代码中使用键盘在文件夹之间切换?

  25. 25

    dll在Visual Studio 2010中使用问题

  26. 26

    dll在Visual Studio 2010中使用问题

  27. 27

    Visual Studio代码:如何在所有文件中实际搜索和替换单词?

  28. 28

    如何在Android Studio中编辑getter的代码生成

  29. 29

    如何在Visual Studio中的项目之间共享C ++源代码文件?

热门标签

归档