質問
単純なインクルードファイルに問題があります。
インクルードされるファイルは2つのMFCプログラムにあります-1つはdllであり、それ自体を非mfc dllにコンパイルします。
最近、大きなDLLで公開されていない元のコードの機能の一部にアクセスしたいときに、小さなDLLのソースをラップする大きなDLLを使用していました。
これはテストであったため、ソースをプロジェクトに追加し、関数を呼び出しました。このエラーが発生しました:構文エラー: ';'の前に ')'がありません
ファイルは正しく含まれており、ソースフォルダーとプロジェクト内に.cppと.hの両方がありますが、コンパイルされません。
最終的に、非常に小さなテストプロジェクトmain.cpp、spooler.cpp、spooler.h(スプーラーは通信のラッパー)を作成し、コンパイルしようとしました。同じ問題。
だから、奇妙な問題が発生していてコンパイルできない場合に備えて、dll関連のものをすべて削除しました。
何が悪いのか、自分の人生を考えることはできません。他に誰かアイデアはありますか?
p.s。ジェフ、ファイルを添付する機能を追加する必要があります。ソースがデータでいっぱいになりすぎるためです。
解決
これは、ファイルをインクルードする方法とは関係ありません。(
および)
を正しくネストしていないために発生する構文エラーです。
他のヒント
/ Pオプションを使用してビルドします。これにより、前処理されたファイルが作成されます(通常、拡張子は.iです)。
Visual Studioでは、オプションは次のようなプロジェクトのプロパティにあります。
C/C++ - Preprocessor - Generate Preprocessed File
これにより、マクロがどのように展開されているかを正確に確認できます。コンパイラを介して.iファイルを実行して、構文エラーの原因となっている正確な行を見つける必要がある場合があります。後処理されたファイルを読むのは苦痛かもしれませんが、何が起こっているかを示す必要があります。
ソースがなければ、何が起こっているのかを正確に確認することは困難です。質問の最初の部分から、この特定のコードは最初に使用されたプロジェクトで正しくコンパイルされるようですが、2番目のプロジェクトに含めるとコンパイルされなくなります。この場合は、このヘッダーの前に含まれている他のヘッダーを調べてください。関数または変数名が別のヘッダー、特にwindows.hで定義されているものと同じ場合、以前に問題なくコンパイルされたコードからエラーが発生することがあります。
このコードが正しくコンパイルされていない場合は、開始/終了を確認することを示唆する他の回答"("がおそらく開始する場所です。
コンパイラーは、エラーが発生した行を通知する必要があります。その行の終わりの前にある前の"("を検索してください。
展開する対象を調べる必要があります。特に、ID_SPOOLER_EVENTとは何ですか?不均衡な括弧がある場合、それがあなたの犯人です。そうでない場合は、マイクBのアドバイスに従ってください。これはプリプロセッサの問題のように見えます。
使用されているコード:
// the only two includes
#include <windows.h>
#include "spooler.h"
// in WinMain
// create window then...
ShowWindow (hwnd, iCmdShow);
UpdateWindow (hwnd);
SpoolerInitiallize( hwnd, ID_SPOOLER_EVENT ); // <-- our function
...
そして、はい、私はそれが間違って綴られていることを知っています、そして、ドキュメント全体で単語initialiseも間違って綴られています。残念ながら、このdllもサードパーティに提供しているため、変更することはできません。
プリプロセッサでマイクB が言ったことを試してください。
その提案は、なぜそのエラーがそれほど馴染みがあったのかを思い出させてくれました。私にとっては、非常に短い #define
であり、変数名をリテラルintなどに置き換えていました。嫌な。
プリプロセッサを介してコードを実行すると、何が起こっているのかがわかります。