【问题标题】:Can I use MSVCRT functions in my DLL Delay-Load Handler function?我可以在我的 DLL 延迟加载处理程序函数中使用 MSVCRT 函数吗?
【发布时间】:2011-05-27 00:12:33
【问题描述】:

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

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

我认为作者的原因是有人可能会尝试延迟加载 MSVCRT 本身。我不打算这样做。那么我使用 MSVCRT 函数是否安全?

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

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

【问题讨论】:

    标签: dll msvcrt


    【解决方案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 总是由启动代码加载的。

    【讨论】:

    • 谢谢!是的,我发现 CRT 确实总是很早就加载。 (进行不区分大小写的字符串比较的能力将减少在命令行上指定备用 DLL 路径的可能性。)
    猜你喜欢
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    • 2023-02-10
    • 2012-04-05
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    • 2017-03-22
    相关资源
    最近更新 更多