2

如果我执行 LoadLibrary("msvcrt.dll") 是否需要以某种方式初始化 CRT?以下文档中的第 2 节似乎说我这样做了,但是当我尝试调用 _CRT_INIT 时,我只是收到了 _CRT_INIT 的未定义符号错误:

http://support.microsoft.com/kb/94248

编辑:我应该说这是一个动态加载它使用的所有 dll 的程序,因此调用 LoadLibrary("msvcrt.dll")。

4

4 回答 4

4

呼唤DllMain()它。如果它依赖于 C 运行时,它将调用 CRT_INIT。

但是一个更好的问题是,如果程序在 msvcrt 中使用了某些东西,则无需显式加载 dll 并对其进行初始化,那么您为什么要这样做呢?

于 2010-12-14T17:31:22.333 回答
1

如果您在 C++ 中工作,您是否声明_CRT_INITextern "C"

您是否尝试过使用该DUMPBIN实用程序(http://support.microsoft.com/kb/177429 - 如果您自己没有PATH起床,我认为您必须使用 Visual Studio 命令提示符)和/EXPORTS开关来查看CRT DLL 提供哪些功能,只是为了仔细检查?

如果您遇到困难,VS2005 和更早版本(可能是更高版本……)会提供运行时库的源代码。对于 VS2005,它位于VC/crt/src,相对于 VS 安装文件夹。看起来_CRT_INIT是正确的名称——参见crtdll.cand dllcrt0.c,它是一个 C 函数。

于 2010-12-14T18:00:32.707 回答
0

你不能调用_CRT_INIT()但调用CRT_INIT()(如果你真的必须)

于 2010-12-14T17:47:32.770 回答
0

您引用的链接是指仅在“在构建 DLL 时使用 CRT 库”时才使用 CRT_INIT() ,即使这样,它也只是两种选择之一;在大多数情况下,第一个可能更可取。

于 2010-12-14T18:02:27.757 回答