掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
DROP が 定義されていない識別子 とエラーが出るのですが・・ (ID:54542)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
HDROP については MSDN (日本語 CD-ROM 版) の説明が不足な気がします。 http://msdn.microsoft.com から直検索すると良いのですが... Windows Data Types の解説中には shellapi.h で宣言されているとあります。 Internet に常時接続でないのなら VC++ のヘッダファイルを直接検索。 $(VS6)\VC98\Include や $(VS6)\VC98\MFC\Include を grep する。 VS6 のメニューからだと「ファイルから検索」を使う。 > 文字数はcharで1byte単位なのですから これが誤りです。DragQueryFile には char* ではなく TCHAR* を渡します。 MBCS ビルドでは TCHAR は char ですが、 UNICODE ビルドすると TCHAR は wchar_t になります。 wchar_t は 1byte ではありません。 文字「数」を求めている関数に sizeof を渡すと UNICODE ビルドでは誤動作します。 >char lpszFile[_MAX_PATH + 1]; にして、エラーは解決しました。 ここは TCHAR szFile[_MAX_PATH+1]; のほうが適切です。 char lpszFile[_MAX_PATH+1]; はポインタではないので。 私はハンガリアン記述を好みません。こーいう場合に誤解の元となります。 #define elementsof(n) (sizeof(n)/sizeof((n)[0])) と定義して DragQueryFile(..., elementsof(szFile)); と渡すのがよさそうです。 # もっと良いのは DragQueryFile に NULL を渡して文字数を教えてもらい # それにしたがって適切な長さのバッファを動的に取ることだと思う。 MSDN で「バッファサイズ、文字数で数える」を渡すよう指示された引数に対し 私は -1 したことはありません。 C で「文字列」というときは必ず \0 が存在するわけで、 「文字列の長さ」というなら strlen() の返す値で \0 を含まない 「バッファの大きさ」というなら \0 を含めた文字列を保持するに十分な大きさ と個人的に解釈しています。 その辺、人によって「解釈の揺れ」があるようですが... # 今まで誤動作したこと無いし問題ないと思う
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.