• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:関数名の名前の衝突について。)

関数名の名前の衝突について

このQ&Aのポイント
  • 関数名の名前の衝突で困っています。Win32APIのGetFileSize関数を例に説明します。
  • 関数名の名前の衝突により、Win32APIのGetFileSize関数が利用できません。解決方法を教えてください。
  • 関数名の名前の衝突について困っています。UNICODEでマルチバイト版とで再定義する必要があるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

 こんばんは。  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)
回答No.3

いずれにしても, 呼び出したい関数は Foo 名前空間にあるんだよね?

shuuden
質問者

補足

はい、Foo名前空間内にあります。 ただ、元の関数もたまに使います。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

C++を使うのであれば、 namespace Foo {  DWORD GetFileSize( wchar_t* const szFilename ){ return 0 ;}  DWORD GetFileSize( char* const szFilename ){ return 0 ;} } のように多重定義すればよいだけでは? ところで、wchar_t* constではなくwchar_t const*では?

shuuden
質問者

お礼

こんにちは。 言われてみれば全くその通りです。 このように記述すると、会社では言われていたのでそうしていました。 もうC++しかしか使っていないはずなので、週明けにでも聞いてみます。 ちなみに、wchar_t* const としているのは、関数内でポインタを変更させないためにしていました。 ありがとうございました。

shuuden
質問者

補足

こんにちは。 会社で聞いてみましたが、発注元の構文規約からきている風習だそうです。ご指摘ありがとうございました。

関連するQ&A