我可以在我的DLL延迟加载处理程序功能中使用MSVCRT函数吗?

时间:2011-05-27 00:12:33

标签: dll msvcrt

我已经使用中的说明为我的项目添加了延迟加载 http://msdn.microsoft.com/en-us/library/151kt790.aspx

在“delayhlp.cpp”(DLL加载助手的示例实现)__HrLoadAllImportsForDll中,我看到编写器避免使用任何标准C库(MSVCRT)函数。我是否需要在我的处理函数中执行相同的操作,该函数将由示例DLL加载帮助程序调用?

我认为作者的理由是有人可能试图延迟加载MSVCRT本身。我不打算这样做。那么使用MSVCRT功能对我来说是否安全?

背景信息。延迟加载第三方DLL的原因是因为两个版本之间存在功能签名更改,我需要使用任一版本运行我的程序。然后,我提供了一个简单的包装函数,以使DLL的函数签名适应所需的函数。当__pfnDliFailureHook2失败时,延迟加载处理程序(GetProcAddress)会注册此函数。

进行一些测试。我在处理程序函数的开头添加了一个断点。我发现当命中断点时,msvcrt.dllmsvcr90d.dll等已经加载(来自Visual Studio的模块窗格)。这是否意味着我可以安全地呼叫CRT功能?

1 个答案:

答案 0 :(得分:1)

        // Check to see if it is the DLL we want to load.
        // Intentionally case sensitive to avoid complication of using the CRT
        // for those that don't use the CRT...the user can replace this with
        // a variant of a case insenstive comparison routine.
        //

对于那些不使用CRT 的人来说,这是更相关的评论,。你不会遇到问题,CRT总是由启动代码加载。