如果我执行LoadLibrary(“msvcrt.dll”),我是否需要以某种方式初始化CRT?以下文档中的第2节似乎说我这样做,但是当我尝试调用_CRT_INIT时,我只是为_CRT_INIT得到了一个未定义的符号错误:
http://support.microsoft.com/kb/94248
编辑:我应该说这是一个动态加载它使用的所有dll的程序,因此调用LoadLibrary(“msvcrt.dll”)。
答案 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.c
和dllcrt0.c
,这是一个C函数。
答案 2 :(得分:0)
您不得致电 _CRT_INIT(),但请致电 CRT_INIT()(如果您真的必须)
答案 3 :(得分:0)
您引用的链接指的是仅在 “在构建DLL时使用CRT库” 时使用CRT_INIT(),即使这样,它也只是两种选择之一;在大多数情况下,第一个可能是首选。