【发布时间】:2010-12-14 17:29:33
【问题描述】:
如果我执行 LoadLibrary("msvcrt.dll") 是否需要以某种方式初始化 CRT?以下文档中的第 2 节似乎说我这样做了,但是当我尝试调用 _CRT_INIT 时,我得到了 _CRT_INIT 的未定义符号错误:
http://support.microsoft.com/kb/94248
编辑:我应该说这是一个动态加载它使用的所有 dll 的程序,因此调用 LoadLibrary("msvcrt.dll")。
【问题讨论】:
-
你为什么要这样做?如果您链接到它,它将自动加载。
-
无论您如何编辑,为什么要显式加载 MSVCRT.DLL 而不是简单地链接导出库?您的应用是否仅有时需要标准库?
-
LoadLibrary 将为您调用 dll 的入口点 (DllMain(...))。所以你不需要进一步初始化它们(它是自动完成的)
-
@Clifford:是的!我们想加载它、使用它、卸载它。
-
@Edwin:如果静态加载msvcrt.dll,调用顺序是DllMainCRTStartup->_CRT_INT->DllMain。如果您动态加载它(使用 LoadLibrary),则不会调用 DllMainCRTStartup(特定于 CRT)。 _CRT_INT 也不是。