草庐IT

c++ - DLL的开销

我有一个非常基本的问题。当库仅由单个进程使用时。我应该将它保留为静态库吗?如果我将库作为DLL使用,但只有一个进程使用它。**间接费用是多少?* 最佳答案 拥有一个单独的DLL几乎没有开销。基本上,对从DLL导出的函数的第一次调用将运行一个微小的stub来修复函数地址,以便通过跳转表的单个跳转执行后续调用。CPU的工作方式,这种额外的间接寻址实际上是免费的。主要的“开销”实际上是机会成本,而不是“开销”本身。也就是说,现代编译器可以做一些称为“整个程序优化”的事情,其中​​整个模块(.exe或.dll)在链接时一次编译和优化。这意味

c++ - 将lib+头文件转为DLL

我有一个库(lib文件+.h头文件)。我喜欢把它变成一个DLL,这样我就可以在VB6中轻松地使用它。有没有方便的方法来做到这一点? 最佳答案 只需在新的dll项目中包含头文件和一个.def文件,并将其与静态库链接。有关如何使用def文件导出符号的详细信息,请参见此处http://msdn.microsoft.com/en-us/library/d91k01sh(VS.80).aspx 关于c++-将lib+头文件转为DLL,我们在StackOverflow上找到一个类似的问题:

由于找不到vcomp110.dll无法继续执行此代码怎么修复

vcomp110.dll是MicrosoftVisualC++的一个库文件。这个库文件是在安装了MicrosoftVisualC++2012RedistributablePackage之后自动安装的。vcomp110.dll是编写多线程程序所必需的,它包含了相关的函数和数据结构,可以帮助开发人员更好地利用计算机的多核处理能力,从而提高程序的性能和响应速度。电脑提示“由于找不到vcomp110.dll无法继续执行此代码”主要的原因就是vcomp110.dll文件丢失或者损坏,小编今天就把修复方法分享给大家:​vcomp110.dll的功能vcomp110.dll主要提供一些多线程处理相关的函数和

windows - C 运行时对象、dll 边界

为dll设计CAPI的最佳方法是什么,它处理传递依赖于C运行时的“对象”(FILE*、malloc返回的指针等)的问题。例如,如果两个dll链接到不同版本的运行时,我的理解是您无法将FILE*从一个dll安全地传递到另一个。是使用依赖于windows的API的唯一解决方案(保证可以跨dll工作)吗?CAPI已经存在并且很成熟,但主要是从unixPOV设计的(当然,仍然必须在unix上工作)。 最佳答案 您要求的是C,而不是C++解决方案。在C中做这种事情的常用方法是:将模块API设计为不需要CRT对象。获取以原始C类型传递的内容-即

windows - 在 DLL 中,函数表的结构是怎样的?

我一直在研究不明确支持我的操作系统的设备库的实现。特别是,我有一个反汇编的DLL,以及相当多的支持源代码。那么,函数表/导出表的结构是怎样的呢?我的理解是.data部分的第一个结构是RVA表。接下来是通过索引链接到第一个地址表的字符串表。这对我来说很有意义,因为链接器可以在符号和地址之间进行转换。序数引用的函数如何适应这张图?如何知道哪个函数有这样那样的序号,链接器如何解决这个问题?换句话说,假设其他一些DLL导入了SOME_LIBRARY_ordinal_7,链接器如何知道要使用哪个函数?谢谢大家!编辑更多信息...我正在使用FTDI库,并且想解决正在调用的函数。特别是,我看到类似这

c# - 观察 exe\dll 使用的资源

我如何观察特定进程以了解它在运行时使用了哪些资源(例如声音、图片、光标和注册表项)?我必须使用C#以编程方式执行此操作(例如使用WindowsAPI或任何第三方库)。感谢任何帮助。谢谢。 最佳答案 我会坚持使用性能计数器。有的是为了内存GDI句柄(位图、字体等)处理(文件、注册表项、事件、互斥量、套接字、进程...)Windows(用户对象)使用性能计数器无法确定确切的类型,但如果您正在泄漏某些内容,它可以给您提示。如果您想知道哪些句柄,您可以使用SysInternals中的句柄,这将为您提供一个很好的每个进程输出,您可以解析。如果

c++ - 如何解决 Windows 10 "Threshold 2"更新(1511,内部版本 15086)后应用程序无法启动并出现 STATUS_DLL_INIT_FAILED (0xc0000142)

我们发布了一个Windows桌面应用程序(使用VisualC++2013和v120_xp平台工具集构建),它在Windows10上运行良好,但我们已经开始收到安装了我们应用程序的“Threshold2”更新的用户的报告现在无法启动,显示以下错误消息:Theapplicationwasunabletostartcorrectly(0xc0000142).ClickOKtoclosetheapplication.错误代码是STATUS_DLL_INIT_FAILED,所以我们大概是在寻找初始化失败的DLL。我们已尝试通过观察在调试器中启动的应用程序并使用进程监视器查看正在加载哪些DLL来解

c++ - DLL 可以调用/加载另一个 DLL 吗?

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭7年前。Improvethisquestion我想从我自己的DLL中调用一些第三方DLL例程。我只是不确定如何在C++中做到这一点。

c++ - 延迟加载 DLL

我迫切需要帮助,我需要在VisualStudio中管理应用程序依赖项。该应用程序仅在特定版本的Windows上链接到DLL,比方说Windows7。在其他环境中,不应加载DLL。我将如何使用DLL延迟加载来实现这一点,因为这个主题对我来说是全新的,并且没有关于这个特定问题的任何好的在线引用。问候 最佳答案 您的项目可以通过在Linker/Input/DelayLoadedDLLs字段中指定它所依赖的dll,但在需要时加载它。对于不同的构建配置,此设置可能不同。 关于c++-延迟加载DLL

windows - 获取 dll 或 exe 的文件版本

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicates:CommandlinetooltodumpWindowsDLLversion?HowdoIretrievetheversionofafilefromabatchfileonWindowsVista?是否可以使用批处理命令获取dll或exe文件的文件版本并将其存储在变量中?