gpt4 book ai didi

debugging - 如何将 C++Builder 应用拆分为 DLL

转载 作者:行者123 更新时间:2023-12-03 08:23:17 25 4
gpt4 key购买 nike

我多次被告知我应该考虑将我的应用程序的各个部分拆分成单独的 DLL(以加快链接等),并且我正在尝试弄清楚它是如何工作的。

我知道我需要将 __declspec(dllexport) 添加到我计划使用的每个头文件声明中。这看起来很乏味,但它是可行的。

如何让应用程序 + DLL 运行?在一个简单的测试项目中,我发现唯一可行的方法是手动将 DLL 从 DLL 项目的构建输出目录复制到 exe 项目的构建输出目录。我知道我可以设置一个构建后步骤来执行此操作,但我希望 IDE 有一些方法可以在应用程序项目属于同一项目组时自动使用 DLL 项目。

如何调试应用程序 + DLL?我看到我可以在项目 -> 选项 -> 调试器下为 DLL 指定主机应用程序的位置,但到目前为止,我只能弄清楚如何一次调试一个项目。我真的很想能够在代码库中的任何位置设置断点并单步执行代码库中的任何位置(而不是在项目边界处停止),但我不知道该怎么做。

最佳答案

I understand that I need to add __declspec(dllexport) to every header file declaration that I plan on using. That seems tedious, but it's doable.

您应该做的是在 DLL 的头文件中创建一个#define,当头文件由 DLL 项目编译时映射到 dllexport,并在其他项目中编译时映射到 dllimport。例如:

#ifndef MyDLLH
#define MyDLLH

#ifdef _BUILDING_DLL_
#define MY_EXPORT __declspec(dllexport)
#else
#define MY_EXPORT __declspec(dllimport)
#endif

#ifdef __cplusplus
extern "C" {
#endif

MY_EXPORT type callingconvention SomeFunc(parameters);
#ifdef __cplusplus
}
#endif

#endif

然后您可以只在您的 DLL 项目中定义 _BUILDING_DLL_,可以在项目选项的条件列表中,也可以在头文件的任何#include 语句上方的代码中,例如:

#define _BUILDING_DLL_
#include "MyDll.h"

How do I get the app + DLLs to run?

DLL 项目生成一个 .lib 文件,用于静态链接到 DLL 的导出函数。您可以将该 .lib 文件添加到您的 EXE 项目,然后像调用任何其他函数一样调用 DLL 函数。或者您可以使用 Win32 API LoadLibrary() 和 GetProcAddress() 函数在运行时动态加载 DLL 函数,在这种情况下您根本不使用 .lib 文件。

In a simple test project, the only way I found that works is to manually copy the DLL from the DLL project's build output directory to the exe project's build output directory.

EXE 的文件夹是操作系统查找 DLL 的第一个位置,但它不是操作系统可以查找的唯一位置。 MSDN 记录了 DLL 在运行时的位置:

Dynamic-Link Library Search Order

I know I can set up a post-build step to do this, but I'd expect the IDE to have some way to automate having an app project use a DLL project when they're part of the same project group.

仅仅属于同一个项目组是不够的。这些项目是相互独立编译的。但是,您可以将 DLL 项目设置为 EXE 项目的依赖项(或者只是确保 DLL 项目在构建顺序上高于 EXE 项目)以便首先编译 DLL,然后使用 DLL 的 PostBuild 事件移动在需要的地方编译 .lib 和 .dll 二进制文件,最后将 DLL 的编译 .lib 文件添加到 EXE 项目,以便在运行时使用 DLL。

How do I debug the app + DLLs?

你有几个选择:

要仅调试 DLL 本身,将 DLL 项目加载到 IDE 中,进入运行参数,并在主机应用程序中设置已编译的 EXE。然后您可以像运行 EXE 项目一样运行 DLL 项目。 EXE 将被执行,调试器将在 DLL 加载到内存后附加到 DLL。

要同时调试这两个项目,请将 EXE 项目加载到 IDE 中,并确保在项目选项的调试源路径中指定 DLL 的源文件夹。然后您可以正常运行 EXE 项目,在调用 DLL 函数时单步执行,在 DLL 的源代码中设置断点等。

关于debugging - 如何将 C++Builder 应用拆分为 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9228612/

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