- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我多次被告知我应该考虑将我的应用程序的各个部分拆分成单独的 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/
我正在通过 labrepl 工作,我看到了一些遵循此模式的代码: ;; Pattern (apply #(apply f %&) coll) ;; Concrete example user=> (a
我从未向应用商店提交过应用,但我会在不久的将来提交。 到目前为止,我对为 iPhone 而非 iPad 进行设计感到很自在。 我了解,通过将通用PAID 应用放到应用商店,客户只需支付一次就可以同时使
我有一个应用程序,它使用不同的 Facebook 应用程序(2 个不同的 AppID)在 Facebook 上发布并显示它是“通过 iPhone”/“通过 iPad”。 当 Facebook 应用程序
我有一个要求,我们必须通过将网站源文件保存在本地 iOS 应用程序中来在 iOS 应用程序 Webview 中运行网站。 Angular 需要服务器来运行应用程序,但由于我们将文件保存在本地,我们无法
所以我有一个单页客户端应用程序。 正常流程: 应用程序 -> OAuth2 服务器 -> 应用程序 我们有自己的 OAuth2 服务器,因此人们可以登录应用程序并获取与用户实体关联的 access_t
假设我有一个安装在用户设备上的 Android 应用程序 A,我的应用程序有一个 AppWidget,我们可以让其他 Android 开发人员在其中以每次安装成本为基础发布他们的应用程序推广广告。因此
Secrets of the JavaScript Ninja中有一个例子它提供了以下代码来绕过 JavaScript 的 Math.min() 函数,该函数需要一个可变长度列表。 Example:
当我分别将数组和对象传递给 function.apply() 时,我得到 NaN 的 o/p,但是当我传递对象和数组时,我得到一个数字。为什么会发生这种情况? 由于数组也被视为对象,为什么我无法使用它
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界. 这篇CFSDN的博客文章ASP转换格林威治时间函数DateDiff()应用由作者收集整理,如果你
我正在将列表传递给 map并且想要返回一个带有合并名称的 data.frame 对象。 例如: library(tidyverse) library(broom) mtcars %>% spl
我有一个非常基本的问题,但我不知道如何实现它:我有一个返回数据框,其中每个工具的返回值是按行排列的: tmp<-as.data.frame(t(data.frame(a=rnorm(250,0,1)
我正在使用我的 FB 应用创建群组并邀请用户加入我的应用群组,第一次一切正常。当我尝试创建另一个组时,出现以下错误: {"(OAuthException - #4009) (#4009) 在有更多用户
我们正在开发一款类似于“会说话的本”应用程序的 child 应用程序。它包含大量用于交互式动画的 JPEG 图像序列。 问题是动画在 iPad Air 上播放正常,但在 iPad 2 上播放缓慢或滞后
我关注 clojure 一段时间了,它的一些功能非常令人兴奋(持久数据结构、函数式方法、不可变状态)。然而,由于我仍在学习,我想了解如何在实际场景中应用,证明其好处,然后演化并应用于更复杂的问题。即,
我开发了一个仅使用挪威语的应用程序。该应用程序不使用本地化,因为它应该仅以一种语言(挪威语)显示。但是,我已在 Info.plist 文件中将“本地化 native 开发区域”设置为“no”。我还使用
读完 Anthony's response 后上a style-related parser question ,我试图说服自己编写单体解析器仍然可以相当紧凑。 所以而不是 reference ::
multicore 库中是否有类似 sapply 的东西?还是我必须 unlist(mclapply(..)) 才能实现这一点? 如果它不存在:推理是什么? 提前致谢,如果这是一个愚蠢的问题,我们深表
我喜欢在窗口中弹出结果,以便更容易查看和查找(例如,它们不会随着控制台继续滚动而丢失)。一种方法是使用 sink() 和 file.show()。例如: y <- rnorm(100); x <- r
我有一个如下所示的 spring mvc Controller @RequestMapping(value="/new", method=RequestMethod.POST) public Stri
我正在阅读 StructureMap关于依赖注入(inject),首先有两部分初始化映射,具体类类型的接口(interface),另一部分只是实例化(请求实例)。 第一部分需要配置和设置,这是在 Bo
我是一名优秀的程序员,十分优秀!