はじめまして、こんにちは。
コンパイルが通らなくて困っています。
エラーメッセージが
error C2065: 'CSIDL_PROGRAM_FILES' : 定義されていない識別子です。
error C2065: 'CSIDL_WINDOWS' : 定義されていない識別子です。
error C2065: 'CSIDL_COMMON_APPDATA' : 定義されていない識別子です。
と表示されるのです。
私なりに調べたところこれらの文字列はパスを表しているらしいことがわかったので、これはインストール時の問題だろうと思い、
Visual C++ 6.0を一度削除して再びインストールしたのですがうまくいきません。
環境は
OS: Win Xp sp2
開発環境:Visual C++ 6.0 sp6
Platform SDK February 2003
です。よろしくお願いします。
定義されていないのですから、件の問題は定義して上げれば解決します。
あるいは、定義しているヘッダファイルをインクルードすれば良いかと。
> コンパイルが通らなくて困っています。
#include <shlobj.h>
をインクルードしてみましょう。
へろりさん、夏みかんさん、早速のご回答ありがとうございます。
"shlobj.h"のインクルードはしているのですが「定義されていない」みたいなのです。
#define CSIDL_PROGRAM_FILES 0x0026
#define CSIDL_WINDOWS 0x0024
#define CSIDL_COMMON_APPDATA 0x0023
...と、ベタ書きすれば確かにコンパイルは通るのですが、できればこの方法は避けたいのです。
あと、同じ環境での他のプログラムのエラーなのですが、
c:\program files\microsoft visual studio\vc98\include\comdef.h(695) : error C2065: 'IClassAdmin' : 定義されていない識別子です。
などコーディングエラーとは考えづらい場所でもエラーが発生しています。
お手数をおかけしますがよろしくお願いします。
1.次の定数値を調べてみる。
_MSC_VER
_WIN32_IE
_WIN32_WINNT
_WIN32_WINDOWS
WINVER
※私の環境では WINVER、_WIN32_IE が 0x501 です。これは Windows XP Home SP2 だからです。
※_MSC_VER に 0x1200(VC6.0) を定義してみる。#define _MSC_VER 0x1200
2.ヘッダは何をインクルードしていますか?
インクルードの順番とかも調査して下さい。
CSIDL ValuesはVC6のヘッダーファイルには定義されていません。
VC6でコンパイルするならば、自分で定義する必要があるでしょう。
夏みかんさん、maruさん、お返事ありがとうございます。
夏みかんさん:
1.について、定数値を調べようと試み C:\Program Files 内を検索にかけたのですが、define しているヘッダファイルが複数、値も複数あるのでどれを正しい?値と認識するかわかりません。どのファイルを参照すべきかご教示ください。
2.についてはもう少し時間がかかりそうなので、何か発見orわからないことがあったら記入させていただきます。
maruさん:
CSIDLの値を利用するために Platform SDK をインストールする...と思っていたのですが、それでは駄目なのでしょうか?
よろしくお願いします。
dadaさん>
> 1.について、定数値を調べようと試み C:\Program Files 内を検索
検索なんかせず、プログラムで
TCHAR szBuffer[128];
sprintf(szBuffer, "_MSC_VER = 0x%X = %d", _MSC_VER, _MSC_VER);
とかやってプログラムで文字列化して確認すればOK。
> CSIDLの値を利用するために Platform SDK をインストールする...と思っていたのですが、それでは駄目なのでしょうか?
そう思ってやって見た結果、駄目だったんでしょ。
私もインストール済みのVC6のヘッダーファイルを検索しましたが見つかりません。
VC2005のヘルプにはしっかり
"These constants are defined in Shlobj.h and Shfolder.h."
と書いてあるに対して、VC6にはこの記述がありません。
CSIDLがVC6で定義されていない理由は、これらの値を使用する関数がDLLのバージョンに依存する
(全ての環境で使用できるわけではない)ためではないかと推測するが、本当の理由は不明。
夏みかんさん>
> ※_MSC_VER に 0x1200(VC6.0) を定義してみる。#define _MSC_VER 0x1200
VC6の_MSC_VERは1200(十進数)です。0x1200ではありません。念の為。
それに_MSC_VERはコンパイラが内部で定義しているものです。変更しちゃいけません。
第一、定義済みの値と異なる値で定義すると再定義になるので、一旦#undefしなきゃならん。
まあ、今回はヘッダーファイル内の定義内容を確認するためのアドバイスだと思うけど。
> VC6の_MSC_VERは1200(十進数)です。0x1200ではありません。念の為。
ご指摘ありがとう。
そうでしたね。
> "shlobj.h"のインクルードはしているのですが「定義されていない」みたいなのです。
ヘッダに定義されていないなら自分で定義するしかないと思う。
新しい PSDK をインストールするまでは CSIDL_XXXX 専用のヘッダを作成して対処。
VC6 使ったことないので後は頑張って下さい。
ごめんねこんなアドバイスしか出来なくて…。
夏みかんさん、maruさん、お返事ありがとうございます。
夏みかんさん:
>ごめんねこんなアドバイスしか出来なくて…。
いいえ、そんなことはありません。こちらこそ変な質問をしてしまってすみません。
maruさん:
>私もインストール済みのVC6のヘッダーファイルを検索しましたが見つかりません。
わざわざ調べていただき、ありがとうございます。私の環境だけが変、というわけではないのですね。
夏みかんさんにご指摘いただき、maruさんに方法を教えていただいた定数値は大方予想通りの結果で、これといっておかしなことはありませんでした。
情報を探そうにも Visual C++ 6.0 は古すぎるせいか、いい情報になかなか巡り会えません。今回は諦めてベタ書きで対応し、今後は新しいバージョンの Visual Studio でコンパイルすることを検討しようと思います。
本当にありがとうございました。
また書き込みしたときにはよろしくお願いします。
ツイート | ![]() |