【发布时间】:2016-02-19 00:58:26
【问题描述】:
我继承了一个 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
仅此而已。我想这意味着我没有出口任何东西。但是,这正是我想要做的。我该怎么做?
【问题讨论】:
-
首要任务是避免导出一切。 DLL 的公共接口需要设计,它不是将属性添加到代码中的随机行为。如果您确实有需要导出的 C++ 类,请注意这样做的相当大的危险,那么您非常赞成使用 __declspec(dllexport)。使用 DEF 文件执行此操作是一种残忍且不寻常的惩罚,并且必然会出错。
-
抱歉我的愚蠢问题。当我声明一个类时,我有一些公共属性和方法。到目前为止,一切都很好。现在,假设我们有 100 个类。每个类都有自己的公共属性和成员。在我(可能是幼稚的)方法中,我只想将代码打包到一个库(一个 DLL 文件)中,并让其他程序只调用每个类的公共接口。那么,如果我使用“public”来定义这个接口,为什么我需要另一种机制来说明哪些部分必须被认为是 public 并且暴露出来才能被调用?
标签: c++ visual-studio-2010 dll dllexport