【问题标题】:Why L before dll path?为什么在dll路径之前有L?
【发布时间】:2011-03-12 10:37:53
【问题描述】:

我已经阅读了将 dll 导入项目的代码,但我不明白为什么我们在路径前有“L”

module = LoadLibrary(L"freeglut.dll");

我如何设置像“C:/VisualStudo/Project”这样的绝对路径

我如何设置相对路径?比如“../../Project1”

谢谢

【问题讨论】:

    标签: c++ path dllimport


    【解决方案1】:

    L 是字符串文字前缀,表示字符串由宽字符 (wchar_t) 组成。

    在 Windows 中,您有两个版本的 LoadLibrary:LoadLibraryA (ansi) 和 LoadLibraryW (unicode),通常 #define 为您的编译选择合适的版本。如果你使用 A 版本你必须传递一个 ansi 字符串,所以不需要 L,如果你使用 LoadLiraryW 你必须传递 Unicode 字符串,所以 L 作为前缀。

    【讨论】:

    • 作为补充说明:该程序肯定只编译为 UNICODE(否则他们会使用 _T("STRING) 变体)。基于 NT 的操作系统(假设除了 Win 9x 和 Millennium)本机使用 Unicode 函数并具有“Ansi”(A 函数)函数以实现兼容性(它们只是“加宽”字符串并调用 W 版本)。链接到 MSDN msdn.microsoft.com/en-us/library/cc500321.aspx 的一些信息
    • 作为澄清说明:wchar_t 不一定表示 2 字节(尽管在当前的 Windows 实现中它是)。其他平台可能支持其他宽度。
    • 不,_T() 宏仅在您仍然以 Windows 95 及其相关系统为目标时才有用。对于新代码,它是无用的。
    【解决方案2】:

    L 告诉编译器后面的字符串是一个宽字符串。宽字符串依赖于编译器,但在流行的 C++ 编译器中,字符串被解释为 unicode 字符串,并按此编码(编码依赖于编译器)。在 Visual C++ 的情况下,字符串编码为 UTF-16,与 Windows API 预期的字符串相匹配。

    【讨论】:

      猜你喜欢
      • 2019-12-05
      • 1970-01-01
      • 1970-01-01
      • 2020-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多