草庐IT

c++ - ProcessExit - DLL 卸载和静态的顺序

有一个EXE,它隐式加载一些DLL和其他显式加载(LoadLibrary)。此EXE正在执行其ExitProcess(剩余进程中的1个线程)并作为忙于卸载DLL的一部分,例如A.DLL。A.DLL(不幸的是)有一个静态的。atexit回调被调用,这个静态的析构函数开始被调用,留下析构函数的踪迹,直到析构函数决定做一些清理并加载一个DLL来做这个。此DLL执行一些方法,直到由于内存访问冲突而发生崩溃,因为它要在此DLL中使用的静态不再存在。查看此静态的堆栈跟踪,其析构函数已作为其DLL卸载的一部分被调用。发生了什么事?DLL已加载,执行了一些方法,开始使用静态(在同一个DLL中)但它已被

windows - 如何正确包含 windows.h 并将最低版本设置为 XP

我目前正在构建一个C++DLL,我在主DLL.cpp文件的顶部有这个。这当前导致警告"WarningC4005:'_WIN32_WINNT':macroredefinition"。我做错了什么?我需要包含windows.h、SDKDDKVer.h并将最低windows版本设置为XP。如何更正我的代码?//SystemIncludes#defineWIN32_LEAN_AND_MEAN#include#include//WindowsVersion#define_WIN32_WINNT_WIN32_WINNT_WINXP#include 最佳答案

windows - 从 32 位 C dll 创建 64 位 dll

我有一个从第三方获得的32位dll。他们没有64位版本。我希望将这个dll加载到64位python中。为此,我需要一个64位dll。是否有将32位dll转换为64位dll的工具,或者这是不可能的?如果不可能,我想我必须使用32位python。 最佳答案 只有供应商可以执行此操作,除非您可以访问DLL的源代码。必须针对64位重新编译它。我猜你必须使用32位python... 关于windows-从32位Cdll创建64位dll,我们在StackOverflow上找到一个类似的问题:

python - 为什么我需要 __declspec(dllexport) 来使某些函数可以从 ctypes 访问?

所以我正在学习使用Pythonctypes模块。这是我在Windows上使用gcc-shared(4.8版)编译的简单C文件,以获取示例.dll:#includeintaddition(inta,intb){returna+b;}我现在可以像这样从Python访问它:>>>fromctypesimport*>>>mylibc=CDLL(r"somepath\mysample.dll")>>>mylibc.addition>>>mylibc.addition(2,3)5现在我尝试对包含此函数的不同的、更大的和更复杂的.c文件做同样的事情:__declspec(dllexport)void

windows - 错误 0xc000007b 尝试绕行注入(inject) DLL 时

我正在尝试使用最新的32位Detours库将DLL注入(inject)新进程。http://research.microsoft.com/en-us/projects/detours/它过去对我有用,但在更改DLL后,它不再对所有进程起作用。当我恢复该过程时,我收到一个消息框,上面写着Theapplicationwasunabletostartcorrectly(0xc000007b).ClickOKtoclosetheapplication.我用注入(inject)的纯空DLL重新创建了它,除了kernel32.dll之外没有任何依赖项。对于其他可执行文件,它可以完美地工作。知道为什

c++ - 为什么 GetProcAddress() 不起作用?

我对DLL编程还很陌生。我已经创建了一个DLL项目,在DLL工程SimpleH.hnamespaceME{classbase{public:static__declspec(dllexport)voidHello();};}__declspec(dllexport)voidHelloWorld();DLL.cpp#include"stdafx.h"#include#include"SimpleH.h"usingnamespacestd;namespaceME{voidbase::Hello(){cout我创建了一个.exe。Main.exe#include"stdafx.h"#incl

c++ - 32 位程序无法捕获在 32 位进程上进行的击键,但能够捕获在 64 位进程上进行的击键

我的环境详细信息:操作系统:Windows7EnterpriseServicePack1(64位操作系统)编译器:MicrosoftVisualStudio2005(Microsoft(R)32位C/C++优化编译器版本14.00.50727.762,适用于80x86)我的程序main.exe和hook.dll是32位的InternetExplorer(iexplore.exe)是64位Chrome(chrome.exe)是32位的我编写了一个名为main.exe的C++程序,它进行以下调用:HOOKPROCcallback=(HOOKPROC)GetProcAddress(dll,"

c++ - 将 Windows 可执行文件用作 DLL 时如何初始化 C 运行时

我正在尝试对我的Windows可执行文件中的类和函数进行单元/组件测试。我想运行实际的编译代码而不将测试用例构建到可执行文件中*。Microsoft工具非常乐意从可执行文件中导出类和函数,我可以链接到它,就好像它是一个DLL一样。问题-由于动态加载的可执行文件的入口点没有被调用并且没有DllMain(从技术上讲它不是DLL),C运行时没有在“DLL”中初始化并且静态没有被初始化**.有没有办法在动态加载的.EXE上下文中调用CRT_INIT并使一切正常工作,或者这很荒谬吗?*如果我在这里遗漏了一些明显的东西,请随时指出正确的方向。**这似乎是我最大的问题。

c++ - LNK2019 : unresolved external symbol -- Implicit DLL

这个问题在这里已经有了答案:Whatisanundefinedreference/unresolvedexternalsymbolerrorandhowdoIfixit?(39个答案)关闭8年前。有很多类似的问题,但我几乎已尽一切努力解决问题,但似乎没有任何效果我创建了一个简单的小Dll。声明:voidfunc_A()voidfunc_B()还有一些其他的东西,我给了它一个C++文件名,但它基本上只是C程序我写了.def文件LIBRARY"myLib.dll"EXPORTSfunc_A@1func_B@2Dll创建成功。我已经确定properties->linker->input->m

windows - MinGW/MinGW64 链接和依赖于 `msvcrt.dll`

我在MinGW中为WinAPI编码我还没有完全理解的一件事是VC可再发行组件,我有一大堆问题有人说这样的程序需要msvcrt.dllbotc++和c编译需要相同的库吗?这是否适用于所有客户目标?我必须重新分发它吗?我可以重新分配它吗?我可以轻松摆脱这种外部依赖吗?有没有其他编译器可以让我不携带这种不愉快的外部依赖?(我隐约记得听说它有问题-我听说它可能不是核心系统库,或者它不能免费使用和重新分发库)我发现这里有问题,因为我想生成没有依赖性的小exe,只调用系统WinAPI,如果我使用一些像C标准库函数函数我更喜欢它经济和静态编译,而不是任何第三方依赖 最佳答