【发布时间】: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 的版本我在用。我怎么知道呢?