首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将外部C++源链接到我的DLL库

问将外部C++源链接到我的DLL库
EN

Stack Overflow用户
提问于 2014-09-27 18:04:02
回答 1查看 413关注 0票数 0

我目前正在可视化c++中实现一个DLL,以生成一个QRCode。为了生成QR代码,我从开放源码下载了QRGenration源代码。源代码具有文件"QRGenerator.cpp“,该文件具有"main”函数,该函数生成QRCode。QRGeneation源代码编译成功,并在执行时生成QRCode。

现在,我想从我正在实现的新DLL中调用QR代码生成函数。在这种情况下,

  • 我想将"QRGenerator.cpp“中的函数"main”重命名为"GenerateQRCode“
  • 然后从我的DLL调用"GenerateQRCode“。

我目前无法在"GenerateQRCode“中重命名主函数名。当我将主函数改为"GenerateQRCode“时,就会出现以下错误。

>MSVCRTD.lib(crtexe.obj):错误LNK2019:函数___tmainCRTStartup中引用的未解析外部符号_main

我是新的视觉C++,我已经没有我的选择,使这个编译工作。你能帮我吗,我如何从我的动态链接库中调用QR生成函数(“GenerateQRCode”)。

P.S:作为参考,我贴在我的程序的目录结构下面

c:\MYDLL\MyDLL.cpp

C:\QRGeneration生成(源代码)

c:\QRGeneration\QRGeneration.cpp

预先谢谢:)。

解决方案I已经创建了一个具有QRCode类型静态库的现有项目,我在库中导出了使用extern生成QRCode的函数。然后,我将这个库链接到我的DLL中,就像http://msdn.microsoft.com/en-us/library/ms235627.aspx中提到的那样。生成了我的DLL文件。

调用我的DLL时会生成QRCode。谢谢:)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-27 18:45:06

如果您只是将main重命名为MSVC项目中用于生成可执行文件(.exe)的另一个函数,那么它将无法工作,因为main()将丢失。

您需要设置另一个创建DLL的项目,然后将其选项设置为类似于生成QR可执行文件的选项,以便该DLL将使用原始QR项目使用的任何源和库,然后将此项目中的main()重命名为GenerateQRCode。

您还需要导出此函数,以便当您从另一个exe或dll加载新DLL时,此函数将是可见的,并可被调用。这可以通过使用__declspec(dllexport)来实现,或者在您的项目中使用一个.def文件,在导出部分中声明该导出。

一个好主意是导出它,或者使用extern "C“的C包装器,这样尝试使用它的可执行文件就不需要使用您编译DLL的相同编译器(由于名称损坏),但这取决于您打算如何使用它。

编辑:

根据上次更新,您选择创建包含QR代码二进制文件的静态库,然后将其与DLL链接。然后将这个DLL复制到另一个位置,并通过调用入口点函数生成QR代码。您的DLL现在包含来自QR静态库的所有必要二进制文件,并且是自给自足的.此外,由于您将DLL移动到另一个位置并生成QR代码,这意味着不使用其他与QR相关的二进制文件。要确保这一点,请从这里下载dependency,运行它,然后在其中删除DLL,并查看它所依赖的其他DLL。

注意:您提到的“extern”关键字本身并不导出符号。它只是声明一个符号存在于您的代码中的某个地方。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26077598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档