2010-04-10 2 views
0

Когда я пытаюсь скомпилировать свой код с помощью функции GetLongPathName(), компилятор сообщает мне, что функция не объявлена.GetLongPathName Undeclared

Я уже прочитал документацию MSDN, расположенную @http://msdn.microsoft.com/en-us/library/aa364980%28VS.85%29.aspx. Но, несмотря на то, что я включил эти файлы заголовков, я все равно получаю необъявленную функцию. Какой заголовочный файл (ы) я должен включать при использовании функции?

#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; 
} 

И, если это имеет значение, в настоящее время я компилирую Dev-C++ на 64-разрядной Windows Vista.

+0

Точное сообщение об ошибке поможет нам диагностировать это. Кроме того, какую версию Windows SDK вы используете? – sblom

+0

Я скомпилировал с VC9 на XP 32 бит. Это дало ошибку, но не тот, о котором вы говорили. Ошибки были из-за несогласованного использования 'char *' и 'TCHAR *' в коде. Кроме того, в качестве побочного примечания, 'return '-10"; 'является катастрофой в ожидании. Прежде всего это const char * (или const TCHAR *), поэтому, если кто-то, кто называет вашу функцию, пытается что-то записать в нее, ваша программа выйдет из строя. Кроме того, если они 'delete [] buffer' (который требуется для обычного случая) снова, он сработает. Если вы можете опубликовать точную ошибку, мы можем получить некоторые подсказки. – Naveen

+0

114 dllmain.cpp 'GetLongPathName» необъявленная (сначала использовать эту функцию) (Каждый необъявленный идентификатор сообщается только один раз для каждой функции появляется в.) Я не уверен относительно того, какая версия Windows SDK Я использую , Как мне это понять? –

ответ

1

Поддержка Dev-C++ для Windows API не завершена. На самом деле, это даже не близко. Весьма вероятно, что функция GetLongPathName не объявлена ​​в winbase.h, которая поставляется с этим компилятором (на самом деле это старая версия MinGW).

Вы можете использовать бесплатный компилятор, который поставляется с Windows SDK, чтобы решить эту проблему. Это тот же самый компилятор, который поставляется с Visual Studio, хотя это только командная строка.

Вы также можете использовать Visual C++ Express Edition, что является бесплатным и предоставляет функции, подобные DevCPP.