- ベストアンサー
#include <winreg.h>をインクルードするとエラーがでまくりです。
何かオプションが足りないとかあるのでしょうか。 cl test01.c advapi32.lib ちなみにコンパイラは Microsoft Visual C++ Toolkitのcl.exeと Microsoft SDKのライブラリです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#1の方が言われるように #include <windows.h> #include <winreg.h> のようにして下さい
その他の回答 (3)
- t_nojiri
- ベストアンサー率28% (595/2071)
>システムが容易しているヘッダと、そうでないヘッダというのは、どう区別するのでしょうか? システムが用意しているものは、開発環境で必ずあるもの。VCとかマイクロソフトのSDK等で用意されたものの事です。 それ以外っていうのは、自分が作ったライブラリを提供する為に用意する様なヘッダファイルの事です。 >winreg.hファイルは、windows.hと同じフォルダに容易されているので、windows.hが、システムが容易しているものと考えるならば、winreg.hも同じだと思うんですけど。 そうです。だからBLUEPIXYさんが書いてる書き方が一般的です。
お礼
なるほどなるほど。 ということは、言葉の微妙な綾の取り違いがあって、話がこじれてしまったのでしょうか。 それとも、僕が勝手に読み違えてただけかな・・? ところで・・ 元凶がわかりました。 #include <winreg.h> #include <windows.h> としてしまっていたのが原因でした。 まずwinreg.hをインクルードし、そのなかでDWORDやINTなどが宣言されているのがわかり、windows.hを付け足したのですが・・ winreg.hをプリプロセッシング?(preprosessing)するときに、まだwindows.hの型が定義されていなかったためでした・・。 初歩的でかつ、到底答えれないような質問ですみませんでした><
- t_nojiri
- ベストアンサー率28% (595/2071)
#include <>はシステムが用意しているヘッダ それ以外は#include ""とするのがお決まりです。 で、それはコンパイラ上今は別に問題ではなさそうですが、 RegSetValueEx()等では Winreg.h 内で宣言、Windows.h をインクルードして使うようですし、宣言がwindows.hを使ってるものもありそうです。 まあ、参考URLでも見ながら勉強してください。
お礼
URLの場所はすでに参考にしたのですが。。 GUIの開発環境ではなく、Visual C++のような設定方法ではないので、ビルドというようなものはわからないので、RegOpenKeyExなどの、主関数を参考にした程度でした。 ところで、システムが容易しているヘッダと、そうでないヘッダというのは、どう区別するのでしょうか? winreg.hファイルは、windows.hと同じフォルダに容易されているので、windows.hが、システムが容易しているものと考えるならば、winreg.hも同じだと思うんですけど。 それともどっちも「それ以外」のヘッダファイルということですか?
- kokorone
- ベストアンサー率38% (417/1093)
#include <winreg.h> ではなく、 #include "winreg.h" ではないでしょうか? Cの標準ライブラリの場合は #include <xxx.h> ですが、それ以外の場合は、 #include "xxx.h" を使うはずです。 また、 #include "Windows.h" は、ありますか? エラーの内容がわからないので、はずして いるかもしれませんね。
お礼
今までGUIアプリをつくるときには、 #include <windows.h> でやってましたが・・。 で、URLのプログラムをコピペしてコンパイルしてみました。 cl test02.c advapi32.lib が、やはりエラーがでました。エラーは次の通りです。 test02.c test02.c(14) : error C2275: 'DWORD' : illegal use of this type as an expression C:\Program Files\Microsoft SDK\include\WinDef.h(141) : see declaration of 'DWORD' test02.c(14) : error C2146: syntax error : missing ';' before identifier 'cbReturned' test02.c(14) : error C2144: syntax error : '<Unknown>' should be preceded by '<Unknown>' test02.c(14) : error C2144: syntax error : '<Unknown>' should be preceded by '<Unknown>' test02.c(14) : error C2143: syntax error : missing ';' before 'identifier' test02.c(14) : error C2065: 'cbReturned' : undeclared identifier test02.c(15) : error C2275: 'BYTE' : illegal use of this type as an expression C:\Program Files\Microsoft SDK\include\WinDef.h(143) : see declaration of 'BYTE' test02.c(15) : error C2146: syntax error : missing ';' before identifier 'bBuffer' test02.c(15) : error C2144: syntax error : '<Unknown>' should be preceded by '<Unknown>' test02.c(15) : error C2144: syntax error : '<Unknown>' should be preceded by '<Unknown>' test02.c(15) : error C2143: syntax error : missing ';' before 'identifier' test02.c(15) : error C2065: 'bBuffer' : undeclared identifier test02.c(15) : error C2109: subscript requires array or pointer type test02.c(16) : error C2275: 'TOKEN_PRIVILEGES' : illegal use of this type as an expression C:\Program Files\Microsoft SDK\include\WinNT.h(5177) : see declaration of 'TOKEN_PRIVILEGES' test02.c(16) : error C2065: 'pToken' : undeclared identifier まだまだあるのですが、文字制限でひっかかりましたので省きます・・
お礼
No.1さんの言われるようにすると、逆じゃないですか・・?