将外部C ++源代码链接到我的DLL库

时间:2014-09-27 18:04:03

标签: c visual-c++ dll visual-studio-2013 qr-code

我目前正在使用visual c ++实现一个DLL来生成QRCode。为了生成QR码,我从开源下载了QRGenration源代码。源代码具有文件“ QRGenerator.cpp ”,其具有“”功能,其生成QRCode。 QRGeneation源代码成功编译并在执行时生成QRCode。

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

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

我目前无法在“GenerateQRCode”中重命名主函数名称。当我将主函数更改为“GenerateQRCode”时,我得到以下错误。

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

我是Visual C ++的新手,我不能完成编译工作。你能帮我吗,我如何从我的DLL调用QR生成功能(“GenerateQRCode”)。

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

之下

C:\ MYDLL \ MyDLL.cpp

c:\ QRGeneration \(源代码)

c:\ QRGeneration \ QRGeneration.cpp

提前致谢:)。

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

一个好主意是导出它,或者使用extern" C"因此,尝试使用它的可执行文件不需要使用与编译DLL相同的完全编译器进行编译(由于名称修改),但这取决于您打算如何使用它。

编辑:

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

注意:' extern'你提到的关键字本身不会导出符号。它只是声明符号存在于整个代码中的某个位置。