- ベストアンサー
関数名の名前の衝突について
- 関数名の名前の衝突で困っています。Win32APIのGetFileSize関数を例に説明します。
- 関数名の名前の衝突により、Win32APIのGetFileSize関数が利用できません。解決方法を教えてください。
- 関数名の名前の衝突について困っています。UNICODEでマルチバイト版とで再定義する必要があるのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 tchar.hをインクルードして、LPCTSTR型を使用して見ては。 #include <windows.h> #include <tchar.h> namespace Foo { DWORD GetFileSize(LPCTSTR szFilename){ return 0; } } int main() { ::GetFileSize(hFile, NULL); Foo::GetFileSize(TEXT("ファイル名")); return 0; } LPCTSTR型はUNICODEで「const wchar_t*」それ以外は「const char*」と成ります。 文字列を渡す時は、 Foo::GetFileSize(TEXT("testlog.txt")); とし、バッファを渡す場合は、 TCHAR bufFilename[MAX_PATH + 1];//ファイル名が入っているとして Foo::GetFileSize(bufFilename); とします。 文字の操作は _tcslen(bufFilename);//文字数を取る の様にして、tchar.hの中にあるマクロを使用します。場合にもよりますが、上手くいけば「A」と「W」を作らずに、一つの関数で済ませる事も出来ます。
その他の回答 (2)
- Tacosan
- ベストアンサー率23% (3656/15482)
いずれにしても, 呼び出したい関数は Foo 名前空間にあるんだよね?
- jacta
- ベストアンサー率26% (845/3158)
C++を使うのであれば、 namespace Foo { DWORD GetFileSize( wchar_t* const szFilename ){ return 0 ;} DWORD GetFileSize( char* const szFilename ){ return 0 ;} } のように多重定義すればよいだけでは? ところで、wchar_t* constではなくwchar_t const*では?
お礼
こんにちは。 言われてみれば全くその通りです。 このように記述すると、会社では言われていたのでそうしていました。 もうC++しかしか使っていないはずなので、週明けにでも聞いてみます。 ちなみに、wchar_t* const としているのは、関数内でポインタを変更させないためにしていました。 ありがとうございました。
補足
こんにちは。 会社で聞いてみましたが、発注元の構文規約からきている風習だそうです。ご指摘ありがとうございました。
補足
はい、Foo名前空間内にあります。 ただ、元の関数もたまに使います。