【问题标题】:GetLongPathName UndeclaredGetLongPathName 未声明
【发布时间】:2011-02-06 10:26:04
【问题描述】:

当我尝试使用函数 GetLongPathName() 编译我的代码时,编译器告诉我该函数未声明。

我已经阅读了位于 @http://msdn.microsoft.com/en-us/library/aa364980%28VS.85%29.aspx 的 MSDN 文档。但是,即使我包含了这些头文件,我仍然会收到未声明的函数错误。使用该函数时应该包含哪些头文件?

#include <Windows.h>
#include <WinBase.h>

#define DLLEXPORT extern "C" __declspec(dllexport)

DLLEXPORT char* file_get_long(char* path_original)
{
    long length = 0;
    TCHAR* buffer = NULL;
    if(!path_original)
    {
        return "-10";
    }
    length = GetLongPathName(path_original, NULL, 0);
    if(length == 0)
    {
        return "-10";
    }
    buffer = new TCHAR[length];
    length = GetLongPathName(path_original, buffer, length);
    if(length == 0)
    {
        return "-10";
    }
    return buffer;
}

而且,如果它有所作为,我目前正在 Windows Vista 64 位上使用 Dev-C++ 进行编译。

【问题讨论】:

  • 确切的错误信息将帮助我们诊断。另外,您使用的是什么版本的 Windows SDK?
  • 我在 XP 32 位上使用 VC9 编译。它给出了错误,但不是你提到的那个。错误是因为代码中char*TCHAR* 的使用不一致。另外,作为旁注,return "-10"; 是等待中的灾难。首先它是 const char* (或 const TCHAR*) ,所以如果有人调用你的函数试图往里面写东西,你的程序就会崩溃。此外,如果他们再次执行delete[] buffer(正常情况下需要),它将崩溃。如果您可以发布确切的错误,那么我们可能会得到一些线索。
  • 114 dllmain.cpp `GetLongPathName' 未声明(首先使用此函数)(每个未声明的标识符仅针对它出现的每个函数报告一次。)我不确定 Windows SDK 的版本我在用。我怎么知道呢?

标签: c++ dev-c++


【解决方案1】:

Dev-C++ 对 Windows API 的支持不完整。实际上,它甚至不接近。 GetLongPathName 函数很可能没有在该编译器附带的 winbase.h 中声明(实际上是 MinGW 的旧版本)。

您可以使用Windows SDK 附带的免费编译器来解决该问题。它与 Visual Studio 附带的编译器相同,尽管它只是命令行。

您也可以使用Visual C++ Express Edition,它是免费的,提供类似于 DevCPP 的功能。

【讨论】:

    猜你喜欢
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    • 2015-01-01
    • 2010-12-19
    • 2021-11-21
    • 2013-05-07
    • 2021-08-04
    • 2019-03-21
    相关资源
    最近更新 更多