2010-04-10 55 views
0

當我嘗試使用函數GetLongPathName()編譯我的代碼時,編譯器告訴我函數未聲明。GetLongPathName Undeclared

我已閱讀位於@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++進行編譯。

+0

確切的錯誤信息將幫助我們診斷此問題。另外,你使用的是什麼版本的Windows SDK? – sblom 2010-04-10 06:21:44

+0

我在XP 32位上用VC9編譯。它給了錯誤,但不是你提到的那個。這些錯誤是由於代碼中'char *'和'TCHAR *'的使用不一致造成的。另外,作爲一個側面說明,「return」-10「;'是一個等待中的災難。首先它是const char *(或const TCHAR *),所以如果有人調用你的函數試圖向它寫入內容,你的程序將會崩潰。另外,如果他們再次執行'delete [] buffer'(正常情況下需要),它會崩潰。如果你可以發佈確切的錯誤,那麼我們可能會得到一些線索。 – Naveen 2010-04-10 06:27:36

+0

114 dllmain.cpp'GetLongPathName」未申報(第一次使用此功能) (每個未聲明的標識符是因爲它出現在每個功能只報告一次。) 我不知道,以我在用Windows的SDK版本。我怎麼弄出來的? – 2010-04-10 06:30:11

回答

1

Dev-C++對Windows API的支持尚未完成。實際上,它並沒有接近。 GetLongPathName函數完全可能沒有在該編譯器附帶的winbase.h中聲明(實際上是MinGW的舊版本)。

您可以使用隨Windows SDK提供的免費編譯器來解決該問題。這是Visual Studio附帶的相同編譯器,儘管它只是命令行。

您也可以使用Visual C++ Express Edition,這是免費的,並提供與DevCPP類似的功能。