• ベストアンサー

#include <winreg.h>をインクルードするとエラーがでまくりです。

何かオプションが足りないとかあるのでしょうか。 cl test01.c advapi32.lib ちなみにコンパイラは Microsoft Visual C++ Toolkitのcl.exeと Microsoft SDKのライブラリです。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

#1の方が言われるように #include <windows.h> #include <winreg.h> のようにして下さい

ggaogg
質問者

お礼

No.1さんの言われるようにすると、逆じゃないですか・・?

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • t_nojiri
  • ベストアンサー率28% (595/2071)
回答No.4

>システムが容易しているヘッダと、そうでないヘッダというのは、どう区別するのでしょうか? システムが用意しているものは、開発環境で必ずあるもの。VCとかマイクロソフトのSDK等で用意されたものの事です。 それ以外っていうのは、自分が作ったライブラリを提供する為に用意する様なヘッダファイルの事です。 >winreg.hファイルは、windows.hと同じフォルダに容易されているので、windows.hが、システムが容易しているものと考えるならば、winreg.hも同じだと思うんですけど。 そうです。だからBLUEPIXYさんが書いてる書き方が一般的です。

ggaogg
質問者

お礼

なるほどなるほど。 ということは、言葉の微妙な綾の取り違いがあって、話がこじれてしまったのでしょうか。 それとも、僕が勝手に読み違えてただけかな・・? ところで・・ 元凶がわかりました。 #include <winreg.h> #include <windows.h> としてしまっていたのが原因でした。 まずwinreg.hをインクルードし、そのなかでDWORDやINTなどが宣言されているのがわかり、windows.hを付け足したのですが・・ winreg.hをプリプロセッシング?(preprosessing)するときに、まだwindows.hの型が定義されていなかったためでした・・。 初歩的でかつ、到底答えれないような質問ですみませんでした><

全文を見る
すると、全ての回答が全文表示されます。
  • t_nojiri
  • ベストアンサー率28% (595/2071)
回答No.3

#include <>はシステムが用意しているヘッダ それ以外は#include ""とするのがお決まりです。 で、それはコンパイラ上今は別に問題ではなさそうですが、 RegSetValueEx()等では Winreg.h 内で宣言、Windows.h をインクルードして使うようですし、宣言がwindows.hを使ってるものもありそうです。 まあ、参考URLでも見ながら勉強してください。

参考URL:
http://www.kab-studio.biz/Programing/Codian/MFCTips/07.html
ggaogg
質問者

お礼

URLの場所はすでに参考にしたのですが。。 GUIの開発環境ではなく、Visual C++のような設定方法ではないので、ビルドというようなものはわからないので、RegOpenKeyExなどの、主関数を参考にした程度でした。 ところで、システムが容易しているヘッダと、そうでないヘッダというのは、どう区別するのでしょうか? winreg.hファイルは、windows.hと同じフォルダに容易されているので、windows.hが、システムが容易しているものと考えるならば、winreg.hも同じだと思うんですけど。 それともどっちも「それ以外」のヘッダファイルということですか?

全文を見る
すると、全ての回答が全文表示されます。
  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.1

#include <winreg.h> ではなく、 #include "winreg.h" ではないでしょうか? Cの標準ライブラリの場合は #include <xxx.h> ですが、それ以外の場合は、 #include "xxx.h" を使うはずです。 また、 #include "Windows.h" は、ありますか? エラーの内容がわからないので、はずして いるかもしれませんね。

参考URL:
http://www.g-ninja.net/tips/shutdown.html
ggaogg
質問者

お礼

今まで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 まだまだあるのですが、文字制限でひっかかりましたので省きます・・

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Visual C++ toolkit / Platform SDK -> ライブラリアン

    今主にVisual C++ toolkit / Platform SDKでプログラミングを勉強しているのですが、ライブラリをつくろうと思ったのですが、ライブラリアンがどの実行ファイルなのかわかりません。 Borland C++ Compilerでtlib.exeがあるのですが、cl.exeで作成した*.objは扱えないみたいで。 ひょっとして、Visual C++ toolkit / Platform SDKにはライブラリアンがなかったりしますか・・?

  • リンクエラーについて

    C++の初心者です。 C++で作成したプログラムがリンクでエラーになります。 エラーの内容は、”LNK2019:未解決のシンボル_IoInitが間数XXXXで 参照されました。”です。 IoInit関数を含むライブラリ(C:\JAVAC\ciolib.lib)をリンクする必要があり、リンカの/DEFAULTLIBオプションでライブラリを指定しましたが、状況は変わりません。 リンカの内容は、以下のとうりです。 cl -I:"C:\Program Files\Microsoft Visual Studio 8\VC\include" -I:C:\j2sdk1.4.2_18\include -I:C:\j2sdk1.4.2_18\include\win32 -LD -FeCiolibJNI.dll CiolibJNI.cpp /link -libpath:"C:\Program Files\Microsoft Visual Studio 8\VC\lib" /NODEFAULTLIB:C:\JAVAC\ciolib.lib /DEFAULTLIB:C:\JAVAC\ciolib.libの指定が悪いのか状況は変わりません。それとも、指定オプションが悪いのか困っています。 リンカが悪いのであれば、修正箇所を教えてください。

  • include<wtsapi32.h>でエラーがでる

    .netを使ってWTSQurySessionInformationのAPIを使う C言語プログラムを作ろうとしています。 ライブラリーにwtsapi32.lib ヘッダーにwtsapi32.h が必要と書いてあったので ライブラリーをインポートし、ヘッダーにPSDKの最新のものをいれましたが、エラーがでます。 c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\WtsApi32.h(109) : error C2061:構文エラー : 識別子 'LPWSTR といったものがたくさんエラーがでます、どうすれば 解決できるでしょうか。調べてもわからないため困っています。OSはXPを使ってます。

  • windows10でVC6.0++のclを使いたい

    cl.exeの場所:C:\Program Files\Microsoft Visual Studio\VC98\Bin 環境変数INCLUDE設定:C:\Program Files\Microsoft Visual Studio\VC98\Include 環境変数LIB設定:C:\Program Files\Microsoft Visual Studio\VC98\Lib を登録したのですが、mspdb60.dllがないといわれました。 検索したらあるのですが、 どうすれば、Windows10でvc6.0++のCコンパイラを使えますか? 教えてくださいよろしくお願いします。

  • LINK : fatal error LNK1104: コンパイラは、ファイル 'DxErr9.lib' を開くことができません。

    使用ソフトはvisual c++.netで DIRECTXの雑誌に付録していたファイルを使って、 ビルドしてみたのですが、 LINK : fatal error LNK1104: コンパイラは、ファイル 'DxErr9.lib' を開くことができません。 っと表示され、EXEファイルが生成されませんでした。 ライブラリファイルにちゃんと登録して、 リンカの依存する関係にも登録したのになぜ? ちなみにライブラリファイルにはちゃんと dxerr9.libはありました。

  • Visual C++ 2005 Express Edition で Microsoft Platform SDK を使うには

    C++ 2005 Express Edition で Microsoft Platform SDK を使いたいのですが、設定の仕方が良くわかりません。 http://www.microsoft.com/japan/msdn/vstudio/express/visualc/usingpsdk/ というサイトに一応説明があったんですが、 手順3の、 [オプション] ダイアログ ボックスの [プロジェクトとソリューション] セクションで [Visual C++ フォルダ] を更新します。 このセクションでは、適切なサブセクションにパスを追加します: Executable ファイル - 「C:\ProgramFiles\Microsoft Platform SDK\Bin」 Include ファイル - 「C:\Program Files\Microsoft Platform SDK\include」 Library ファイル - 「C:\Program Files\Microsoft Platform SDK\lib」 というところのどこにファイルを追加するのかと、ファイルの追加の仕方が良くわかりません。オプションで、VC++ディレクトリというところにいくまではわかるのですが、その先がわかりません。困っているので、よろしくお願いします。

  • フリーでBCCでコンパイルすると、ライブラリが合わないのかエラーに

    フリーのボーランドのCコンパイラBCCとあるライブラリをリンクさせると次のようになります。 bcc32 -c test.c ilink32 test.obj jumper.lib 'JUMPER.LIB' contains invalid OMF record, type 0x21(possibly COFF) マイクロソフト製品で作られたライブラリとボーランドのリンクはうまくいかないのでしょうか?

  • cl.exeを実行すると、ダイアログが表示される

    今までは、Visual C++ Toolkit 2003のcl.exeを使っていたのですが、Visual Studio 8のcl.exeを使ってみたところ、ダイアログが表示されました。 表示されたダイアログのタイトル cl.exe - エントリ ポイントが見つかりません その内容 プロシージャ エントリポイント __security_error_handler がダイナミックリンク ライブラリ MSVCR80.dllから見つかりませんでした。 と表示されます。 推察するに、MSVCR80.dllを参照しているが、その中に__security_error_handlerというプロシージャがありませんでしたよということでしょうか。 しかし、MSVCR80.dllというファイルを参照した結果、__security_error_handlerプロシージャが見つからないのであって、MSVCR80.dll自体が見つからないというわけではないので、何をすれば問題が解決されるのかわかりません。 再インストールしてみましたが(アンインストールしてからではなく、再インストール操作)、だめでした。 インストール後の設定が間違っているだけの可能性もありますが、そこも含めて、何がいけないのかどうぞ教えてください。 ちなみに、インストール後は、 環境変数から pathに%VC%\binを追加 libパスをつくり、%VC%\libを追加 includeパスをつくり、%VC%\includeを追加 をしました。

  • 'd3dx9.lib' が開けません。

    DirectXの事で質問があります。 Microsoft Visual C++ 2008 Express Edition で Microsoft DirectX SDK (March 2008)の Matrices.cppというチュートリアルのコードを実行したのですが、 1>LINK : fatal error LNK1104: ファイル 'd3dx9.lib' を開くことができません。 とのエラーがかえってきます。 DirectX エンドユーザー ランタイム (March 2008) も DirectX エンドユーザー ランタイム ウェブインストーラも インストールしましたけれども、解決できません。 ツール オプション で、インクルードファイルとライブラリも DirectX SDK (March 2008)のインクルードとライブラリのパスを指定しました。 プロパティでd3d9.lib d3dx9.lib winmm.libを 追加依存ファイルに設定してます。 それでも、'd3dx9.lib' を開きたくないそうです。 どのようにしたら、Matrices.cppを実行できますでしょうか。 できれば、d3dx9.libも開けるようにしておきたいのですが、 どのようにしたら、d3dx9.libをひらけるようになりますでしょうか。

  • VC++、windows.hのincludeエラー

    最近C++を勉強し始めたのですが出だしからつまづいてしまいました。 Visual Studio 2010 SP1 + Windows SDK 7.1 (OS:windows7 Professional 64bit版)を使用しているのですが、#include <windows.h> のみでビルドを行ったところ以下のように driverspecs.h でエラーが生じてしまいました。 1>c:\program files\microsoft sdks\windows\v7.1\include\driverspecs.h(356): error C2143: 構文エラー : ')' が '(' の前にありません。 1>c:\program files\microsoft sdks\windows\v7.1\include\driverspecs.h(356): error C2091: 関数は関数を返せません。 1>c:\program files\microsoft sdks\windows\v7.1\include\driverspecs.h(356): error C2059: 構文エラー : ')' <中略> 1>c:\program files\microsoft sdks\windows\v7.1\include\driverspecs.h(699): fatal error C1003: プログラム内のエラーが 100 個を超えました。コンパイルは中断されます。 1> 1>ビルドに失敗しました。 以下に driverspecs.h ファイルのエラー部分を抜粋して載せておきます。 __ANNOTATION(SAL_functionClass(__in char *);) #define __drv_functionClass(x) \ __drv_out(__drv_declspec("SAL_functionClass(\""#x"\")")) まだ始めたばかりで知識も乏しく、どのように対処をしていいものか困っています。 何か解決の糸口になるようなヒントでも構いませんので教えて頂けると助かります。 よろしくお願いします。