如果我执行 LoadLibrary("msvcrt.dll") 是否需要以某种方式初始化 CRT?以下文档中的第 2 节似乎说我这样做了,但是当我尝试调用 _CRT_INIT 时,我只是收到了 _CRT_INIT 的未定义符号错误:
http://support.microsoft.com/kb/94248
编辑:我应该说这是一个动态加载它使用的所有 dll 的程序,因此调用 LoadLibrary("msvcrt.dll")。
如果我执行 LoadLibrary("msvcrt.dll") 是否需要以某种方式初始化 CRT?以下文档中的第 2 节似乎说我这样做了,但是当我尝试调用 _CRT_INIT 时,我只是收到了 _CRT_INIT 的未定义符号错误:
http://support.microsoft.com/kb/94248
编辑:我应该说这是一个动态加载它使用的所有 dll 的程序,因此调用 LoadLibrary("msvcrt.dll")。
呼唤DllMain()
它。如果它依赖于 C 运行时,它将调用 CRT_INIT。
但是一个更好的问题是,如果程序在 msvcrt 中使用了某些东西,则无需显式加载 dll 并对其进行初始化,那么您为什么要这样做呢?
如果您在 C++ 中工作,您是否声明_CRT_INIT
为extern "C"
?
您是否尝试过使用该DUMPBIN
实用程序(http://support.microsoft.com/kb/177429 - 如果您自己没有PATH
起床,我认为您必须使用 Visual Studio 命令提示符)和/EXPORTS
开关来查看CRT DLL 提供哪些功能,只是为了仔细检查?
如果您遇到困难,VS2005 和更早版本(可能是更高版本……)会提供运行时库的源代码。对于 VS2005,它位于VC/crt/src
,相对于 VS 安装文件夹。看起来_CRT_INIT
是正确的名称——参见crtdll.c
and dllcrt0.c
,它是一个 C 函数。
你不能调用_CRT_INIT()但调用CRT_INIT()(如果你真的必须)
您引用的链接是指仅在“在构建 DLL 时使用 CRT 库”时才使用 CRT_INIT() ,即使这样,它也只是两种选择之一;在大多数情况下,第一个可能更可取。