【发布时间】:2012-11-26 02:26:57
【问题描述】:
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 编译?向量的构造函数和 push_back 调用的代码(即内存管理、异常处理......)位于 MSVCRT.DLL 中......据我所知,在这个阶段不能保证被映射。有特殊待遇吗?
【问题讨论】:
-
vector的代码只有标题;它将完全编译到您的模块中。 -
@JamesMcNellis:并非它所依赖的所有内容都是仅标题。
-
这可能很好,但如果你想安全而不是抱歉,为什么不在 DllMain 之后手动调用一个函数来初始化 DLL?
标签: c++ dll constructor msvcrt