我继承了一个C ++项目,并且需要在DLL中对其进行转换,以便在其他项目中使用它。
该代码在Visual Studio 2010解决方案中有框架。我可以编译它并生成一个DLL文件,但是没有关联的lib文件。我不是Windows开发人员,但是似乎我需要导出要使用的功能,并且有两种方法:
第一种选择意味着要在我要导出的每个类或函数前面手动添加__declspec(ddlexport)。由于有很多类,而且我无法控制将要与该库链接的所有应用程序,因此第二个选项(DEF文件)看起来更有希望。
有什么方法可以从现有的DLL文件生成DEF文件吗?我尝试了不同的解决方案:
使用dumpbin。我没有看到函数名称。只是这个:
档案类型:DLL
概括
1000 .data
2000 .idata
18000 .rdata
5000 .reloc
1000 .rsrc
98000 .text
48000 .textbss
而已。我想这意味着我什么也没汇出。但是,这正是我想要做的。我该怎么做?
在反复遇到这个问题几年后,我今天找到了一个解决方案。这有点骇人听闻,但实际上可能是使用Visual Studio的最佳方法。
由于您不想导出所有可能的符号(特别是因为DLL本身可能包含大型静态库),并且您无法使用要使用的符号来编辑文件(对我来说,因为它们是第三方库)必须将其静态链接以遵循其使用模式),而DEF是最佳解决方案。
如果我们有:
现在建立!
好的,我们收到很多链接器错误...
现在转到“输出”选项卡,请注意,在输出文本中的每个链接器错误行的末尾是符号名称:
我们可以创建一个小脚本,使用每行的最后一个“单词”,将其删除,然后将其放入您的DEF文件中。而且有效!
就像我说的那样,这有点不客气(因为您最终只会看到当时应用程序使用的符号)。但是实际上,由于您不想导出所有内容,并且可能需要库中的符号以静态方式链接到该库,因此这可能是解决此问题的最准确方法。
(注意:在我看来,这主要是试图使插件DLL可以访问应用程序EXE中的符号的问题)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句