gpt4 book ai didi

c - 将外部 C++ 源链接到我的 DLL 库

转载 作者:行者123 更新时间:2023-11-30 17:28:17 25 4
gpt4 key购买 nike

我目前正在使用 Visual C++ 实现一个 DLL 来生成 QRCode。为了生成 QR 码,我从开源下载了 QRGenration 源代码。源代码中有文件“QRGenerator.cpp”,其中包含“ma​​in”函数,用于生成 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 的函数。然后我将这个库链接到我的 DLL 中,如 http://msdn.microsoft.com/en-us/library/ms235627.aspx 中所述。 。并生成了我的DLL文件。

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

最佳答案

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

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

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

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

编辑:

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

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

关于c - 将外部 C++ 源链接到我的 DLL 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26077598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com