_UNICODE
and/orUNICODE
を Builder で定義し、VC で定義していません。
ほとんどの Windows API には、ANSI フレーバーと UNICODE フレーバーの 2 つのフレーバーがあります。
を呼び出すとSetWindowText
、実際には関数がありませんSetWindowText
。代わりにSetWindowTextA
、ANSI 文字列を受け取る関数とSetWindowTextW
UNICODE 文字列を受け取る関数の 2 つがあります。
プログラムが /DUNICODE /D_UNICODE でコンパイルされている場合、SetWindowText
SetWindowTextW which expects a
const wchar_t *` にマップされます。
これらのマクロを定義せずにプログラムをコンパイルするSetWindowTextA
と、const char *
.
Windows ヘッダーは通常、これを実現するために次のようなことを行います。
#ifdef UNICODE
#define SetWindowText SetWindowTextW
#else
#define SetWindowText SetWindowTextA
#endif
同様に、 2 がありますGetFileAttributes
。
DWORD WINAPI GetFileAttributesA(LPCSTR lpFileName);
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName);
VC では、UNICODE/_UNICODE を定義していないため、string::c_str()
を返すものを渡すことができますchar *
。
Builder では、おそらく UNICODE/_UNICODE を定義しており、wchar_t *
.
この UNICODE/_UNICODE 処理を明示的に行っていない可能性があります (IDE が行っている可能性があります)。そのため、IDE のオプションを確認してください。
これを修正する方法はたくさんあります
- IDE で UNICODE/_UNICODE オプションを見つけて無効にします。
また
- 使用
std::w_string
- その後c_str()
、wchar_t *
また
GetFileAttributesA
代わりに直接呼び出すGetFileAttributes
- これら 2 つのバリアントに付属する他のすべての Windows API に対してこれを行う必要があります。