草庐IT

DLL_THREAD_ATTACH

全部标签

C++/Windows : HeapAlloc() for contention-free per-thread heaps

我有一个使用boost::thread的多线程应用程序。出于性能原因,我希望每个线程都有一个独立的堆。我可以使用HeapCreate()创建一个堆,但不清楚如何将其连接到CRT库,以便new和malloc在创建的堆上分配内存。如何做到这一点? 最佳答案 Howcanthisbedone?如果不完全替换整个内存分配器就无法完成。例如可伸缩内存管理器Hoard正是这样做的。但是替换内存分配器并不适合胆小的人。如果您想通过HeapCreate使用每线程堆,并且合理包含您的分配/释放代码,那么您可以简单地调用HeapAlloc和HeapFr

windows - mingw std::thread 与 Windows API

我开始使用C++11std::thread(mingw4.8)到目前为止一切顺利。我遇到了重叠I/O的情况,其中sleepEx用于将线程置于可警告的等待状态。这工作得很好,直到必须使用QueueUserAPC,它返回一个“无效句柄错误”。经过一番查找,发现std::thread使用的是Windows下的pthread库。有没有什么方法可以使用WindowsAPI调用,它需要一个带有std::thread的线程句柄?或者我是否需要坚持使用Windows线程来处理重叠I/O? 最佳答案 为了解决您的问题,MinGW-w64winpthr

c++ - COM dll注销问题

我有一个包含许多COMdll的项目,为了满足要求,我必须注销一个COMDll,我通过调用Regsvr32-u选项来注销该dll。这个注销操作似乎删除了一个接口(interface),比如ICommon接口(interface),这使得其他COM对象不可用。此ICommon接口(interface)由所有其他COM组件实现,在未注册的COMDll的注册表脚本中,我没有看到任何删除此ICommon接口(interface)的代码表单注册表,如何删除它。如何为给定的CoClass删除接口(interface)信息,BEGIN_COM_MAP和COM_INTERFACE_ENTRY有什么作用吗

windows - 如何检测 Delpi 代码是否在 DLL 中运行?

我正在创建一个主要供非Delphi调用者使用的[Windows]DLL。我想使用一些现有的“库”代码,但如果在DLL中执行,有些部分可能不合适或有问题。有没有办法检测代码是否在DLL中运行? 最佳答案 System.IsLibraryIndicateswhetherthemoduleisasharedlibrary.TheIsLibraryvariableisTrueifthemoduleisadynamiclinklibrary(DLL). 关于windows-如何检测Delpi代码是

c++ - 在系统上的何处安装 SDK DLL,以便需要它们的应用程序可以找到它们

我有一个正在开发的SDK,之前的开发人员刚刚在System32中删除了DLL(显然是严重的违规行为:seehere)假设我将它们移出到\ProgramFiles\\SDK(或其他),我如何确保所有需要这些DLL的应用程序都可以访问它们?需要澄清的是,所有访问这些的应用程序都在编译时对DLL进行早期(静态)绑定(bind),因此我无法将完整路径传递给它们或任何东西。他们需要能够在仅给出DLL文件名的情况下找到它。按照同样的思路,包含特定版本的MSVCR80.dll怎么样?他们都依赖于此,但我需要确保他们获得特定版本(我包括的版本)。有什么想法吗? 最佳答案

c# - .NET EXE 和 DLL 之间的堆栈/堆差异

这个问题困扰了我很久:.NETEXE和DLL文件都有地址空间。我知道他们都有代码空间和全局变量空间。但我想知道DLL是否有自己的堆和堆栈空间。 最佳答案 进程拥有堆。每个线程都拥有自己的堆栈。当EXE调用DLL中的函数时,使用相同的堆栈,因为函数调用在同一线程中。要说明的另一点是进程具有加载EXE和DLL的地址空间。 关于c#-.NETEXE和DLL之间的堆栈/堆差异,我们在StackOverflow上找到一个类似的问题: https://stackoverf

c++ - DLL 内存管理器混淆

我写了一个应用程序,允许人们贡献插件来扩展功能。这些插件被部署为DLL文件,框架在运行时获取这些文件。每个插件都有一个工厂函数,在应用程序的生命周期中多次调用该函数来创建对象。到目前为止,为了处理这些对象的所有权问题,我对返回的对象使用了一个简单的计数共享指针,以便在删除最后一个引用时销毁它们。但是,这往往会在Windows上触发崩溃,因为在插件DLL中新建对象但稍后(由于对共享指针的deref()调用)在主应用程序中删除的情况并非不可能发生-据我所知,这种malloc/free混合在Windows上是禁忌。我目前的解决方案是让deref()不调用“删除这个;”直接而是一个'relea

c# - .dll 中发生类型为 'System.StackOverflowException' 的未处理异常

我正在用C#开发Windows应用程序。在我的应用程序中,我使用了一个静态类。代码如下:publicstaticclassclsNumber{privatestaticobjectvValue;publicstaticobjectValue{get{returnValue;}set{Value=value;}}publicstaticstringHexValue{get{try{returnMicrosoft.VisualBasic.Conversion.Hex(vValue);}catch{returnConvert.ToString(vValue);}}set{Value=Micr

windows - x64 调用另一个 dll 中的函数

有人可以向我解释x64平台上的以下行为吗:如果我从我的可执行文件调用x64中另一个dll中的函数,则反汇编代码如下所示:000000014000149EFF1534CF0000callqwordptr[__imp_CFuncInDll(14000E3D8h)]我意识到调试器计算的是这个绝对地址14000E3C0h的相对地址。然而,与x86代码不同,如果我反汇编地址14000E3D8h,它看起来像垃圾:__imp_CFuncInDll:000000014000E3D81910sbbdwordptr[rax],edx000000014000E3DA25FCFE0700andeax,7FEF

c - DLL 函数未导出 : Unable to find an entry point named TestFunc

我正忙于了解一点点C/C++,并与C#互操作。我已经检查了几个创建简单的Win32DLL并从C#使用它的示例,但是当我尝试调用我的DLL时,我收到运行时错误:“无法找到名为TestFunc的入口点”。我的DLL看起来像这样,我从一个Win32DLL项目创建它,带有空项目选项:标题:__declspec(dllexport)intTestFunc(char*,char*,char*);代码文件:#include"stdafx.h"#include"TestLib.h"__declspec(dllexport)intTestFunc(char*arg1,char*arg2,char*arg