VC++で周波数を調べるプログラムを作成しています。


プログラムを作成し、ビルドした際に

C:\WinDDK\7600.16385.1\inc\atl71\atlconv.h(545): error C3641: 'AtlDevModeW2A' : /clr:pure または /clr:safe と共にコンパイルされた関数に対する呼び出し規約 '__stdcall ' が無効です

というエラーが検出されます。
clr:pureとclr:safeを使用しているので、stdcallは全てclrcallに変更しました。
しかし、stdcallがないにも関わらず、上記のようなエラーが出てしまうんですが、どのように直せばいいんでしょうか?
解る方がいらっしゃいましたら教えてください。
お願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2011/12/23 13:55:02

回答0件)

回答はまだありません

  • id:tdoi
    構造が何も分からないので、分かることだけ。
    手元のatlconv.hとちょっと違うかもですが、

    #ifdef _WINGDI_
    ATLAPI_(LPDEVMODEA) AtlDevModeW2A(_Inout_ LPDEVMODEA lpDevModeA, _In_ const DEVMODEW* lpDevModeW);
    #endif

    となっていて、ATLAPI_マクロを見てもらえれば分かりますが、これによって、__stdcallがこの関数に対して指定されます。そして、これがエラーになっていると思われます。

    なので、これが宣言されなければいいわけで、_WINGDI_がdefineされていなければよいです。
    では、これがいつdefineされるかというと、WinGDI.hでdefineされます。

    とはいえ、意図しているかどうかは別として、必要だからWinGDI.hをインクルードしているのでしょう。
    では、どうするかですが、ATLが必要な部分と、CLRで書きたい部分をプログラム的に分けてしまうのが手っ取り早くて、構造的にもスマートなのではないかなと思います。

    想像で書いていることがほとんどですが、何かの参考になれば。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません