- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
DLL 中的以下代码会发生什么情况?
#include <vector>
std::vector<int> global_vector;
BOOL WINAPI DllMain(HANDLE hModule, DWORD fdwReason, LPVOID lpReserved)
{
if (fdwReason == DLL_PROCESS_ATTACH)
{
global_vector.push_back(1);
}
return TRUE;
}
...如果使用/MD 编译? vector 的构造函数和 push_back 调用的代码(即内存管理、异常处理...)位于 MSVCRT.DLL... 据我所知,在这个阶段不能保证被映射。它是否得到特殊对待?
最佳答案
来自 here :
In a nutshell, when
DllMain
is called, OS loader is in a rather fragile state. First off, it has applied a lock on its structures to prevent internal corruption while inside that call, and secondly, some of your dependencies may not be in a fully loaded state. Before a binary gets loaded, OS Loader looks at its static dependencies. If those require additional dependencies, it looks at them as well. As a result of this analysis, it comes up with a sequence in whichDllMain
s of those binaries need to be called. It's pretty smart about things and in most cases you can even get away with not following most of the rules described in MSDN - but not always.
关于c++ - DLL 中的全局构造函数和 MSVCRT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13557855/
我尝试从 PyCharm 的控制台读取一个字符(不按 Enter 键),但无济于事。函数 msvcrt.getch() 停止代码,但不会对按键使用react(甚至 Enter),并且 msvcrt.k
我经常遇到与程序可执行文件捆绑在 MSVCRT(或它们更当前的等价物)中的 Windows 程序。在典型的 PC 上,我会找到许多相同 .DLL 的副本。我的理解是 MSVCRT 是 C 运行时库,有
我正在回到 C++ 并使用 code::blocks。一切都很顺利,但不知从哪里开始出现这个错误 'Program received signal SIGSEGV, Segmentation faul
因此,我有一个 C++ 库,其中包含 MSVCRT 的静态链接拷贝。我希望任何人都能够将我的库与任何版本的 MSVC 运行时一起使用。实现这个目标的最佳方式是什么? 我已经非常注意事情的完成方式。 内
我写了一个简单的 python 代码,它应该检测我的击键,但由于某种原因在每次击键后检测空间。 编码: import msvcrt print("press 'escape' to quit...")
我们有一个使用大量 DLL 的大型 MFC 应用程序。到目前为止,我们一直在使用 vcredist_x86.exe 将 MFC 和 CRT 安装到非托管并行程序集缓存 (C:\Windows\WinS
当我在 mingw 中编译空 main 时,我得到 27kb exe 和 1000 行反汇编,生成的 exe 引用 kernel32.dll 和 msvcrt.dll 在某个地方我可以放置“-nost
什么会导致 MSVCRT system()函数始终返回 -1 错误代码,即使应用程序已成功执行和退出并返回 0 作为其退出代码? 我用 TDM-GCC-4.9.2 和 FASM 进行了测试,只调用了
我已经在 Visual Studio 2010 中构建了一个 MFC 应用程序,但我正在为在安装程序中包含再分发而绞尽脑汁。 该应用程序是静态链接的,所以我不需要再分发文件,它是独立的,对吧? 最佳答
DLL 中的以下代码会发生什么情况? #include std::vector global_vector; BOOL WINAPI DllMain(HANDLE hModule, DWORD fd
import msvcrt x: int = 0 while not msvcrt.getch() == ' ': if x <= 10000: print(x)
我需要在 python 中创建一个程序/游戏,其中用户快速输入 2 个键,例如 z 或 x 键,这使得他们的角色每次按正确的顺序按下时都会向前移动。我做了很多研究,并决定我应该使用 msvcrt.ge
主题说了 - 是否有一种可靠的方法来检测是否针对 MSVCRT 的调试版本构建了 .lib 静态库(以及动态库,如果可能的话)?例如。是否有任何可用于检测的导入符号? 基本上我有一个使用大量依赖静态库
这里是新用户,也是使用 OpenCV 编程的新手。 我使用的是 Visual Studio 2012,并且按照说明安装了所有 OpenCV 模块,运行代码捕获视频流和过滤器/等没有问题。 我正在尝试在
PYTHON 3.3,msvcrt import sys, msvcrt print("Please press a key to see its value") while 1: key =
我想问问 msvcr100 是否比 msvcrt 有优势,优势是什么。 当使用 msvc 编译器编译时,我得到的可执行文件链接到 msvcr100,因此它需要安装 MS Visual C++ Redi
如果某些应用程序的库动态依赖于 msvcrt.dll,我是否应该使用我的应用程序重新分发 msvcrt.dll 并使用私有(private) dll? IE。系统的 msvcrt.dll(dll he
我正在尝试弄清楚标准 C 函数(如 printf())如何在 Windows 环境中加载到内存中。我知道 crt0.obj 准备堆栈,调用 int main(int argc, char **argv
似乎glibc's implementation of fprintf() is thread-safe ,但 Microsoft 的 CRT 也是如此吗? 所谓线程安全,我指的不仅仅是崩溃,还包括如
我已经阅读了双方关于是否应该在 Visual Studio 项目中静态或动态链接到 C 运行时库的争论,但我仍然不完全确定该怎么想。 我的项目引入了一些第三方库(Python、HDF5、Trilino
我是一名优秀的程序员,十分优秀!