如何初始化msvcrt.dll?

时间:2010-12-14 17:29:33

标签: c++ winapi msvcrt

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

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

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

4 个答案:

答案 0 :(得分:4)

在其中调用DllMain()。如果它依赖于C运行时,它将调用CRT_INIT。

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

答案 1 :(得分:1)

如果您使用的是C ++,是否已将_CRT_INIT声明为extern "C"

您是否尝试过使用DUMPBIN实用程序(http://support.microsoft.com/kb/177429 - 如果您自己没有PATH,则必须使用我认为的Visual Studio命令提示符)使用/EXPORTS开关查看CRT DLL中可用的功能,只需要仔细检查?

如果你遇到困难,VS2005及更早版本(可能是后来......)会提供运行时库的源代码。对于VS2005,相对于VS安装文件夹,这是VC/crt/src。看起来_CRT_INIT是正确的名称 - 请参阅crtdll.cdllcrt0.c,这是一个C函数。

答案 2 :(得分:0)

您不得致电 _CRT_INIT(),但请致电 CRT_INIT()(如果您真的必须)

答案 3 :(得分:0)

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