0

関数 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++ を使用してコンパイルしています。

4

1 に答える 1

1

Dev-C++ による Windows API のサポートは完全ではありません。実際、それは近くさえありません。そのコンパイラに同梱されている winbase.h で GetLongPathName 関数が宣言されていない可能性は十分にあります (実際には MinGW の古いバージョンです)。

この問題を回避するには、 Windows SDKに同梱されている無料のコンパイラを使用できます。コマンドラインのみですが、Visual Studio に同梱されているのと同じコンパイラです。

無料で DevCPP と同様の機能を提供するVisual C++ Express Editionを使用することもできます。

于 2010-04-10T17:01:50.083 に答える