• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:atlstr.hのインクルードによるエラーについて)

atlstr.hのインクルードによるエラーについて

このQ&Aのポイント
  • atlstr.hのインクルードにより生じるエラーについて質問させて頂きます。
  • Visual Studio 2008 Professional Editionで、atlstr.hをインクルードしてプログラムを実行すると、フォームが表示されずエラー音が鳴る現象が発生します。
  • プロジェクトダイアログで新しいプロジェクトを作成し、atlstr.hをインクルードするとエラーが起きます。原因を分析できず、アドバイスを求めています。

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

  • ベストアンサー
  • samtomsan
  • ベストアンサー率55% (1060/1897)
回答No.4

これまでに書かれた内容から、多分同じであろうというプロジェクトを作って見ました。 結果は、 Debugでは VS上でデバッグ開始/デバッグなしで開始/exeで実行のいずれでもエラーメッセージ(Debug Assertion Faild! この下のメッセージは内容が判りませんでした。存在しないディレクトリのdbgheap.cを示していましたので)を出して、中止を選んでもプロセスが残ったままでした。すべて中止にすればプロセスも終了しました。 Releaseでは デバッグ開始でハンドルされていない例外のエラー、デバッグなしで開始/exeで実行のいずれでもForm1が表示されました。 右上の閉じるボタンで終了しました。 Visual Studio 2008 Professional Version 9.0.30729.1 SP です。 結果だけで、原因と解決法はわかりません。

fancyoldfox
質問者

お礼

ご回答ありがとうございます! samtomsan様のおっしゃる通り、Releaseモードではatlstr.hをインクルードし、CStringクラスを使用することができました!これで、やっと作成したプログラムを動かすことができます。本当にありがとうございます。 ただ、Debugにおいてエラーが発生する原因が不明なので、今後開発するプログラムではbluecampus様のアドバイスに従い、System::StringやEncodingを使用して行こうと思います。 Wr5様、redfox63様、bluecampus様、samtomsan様、この度は質問へのご回答に貴重なお時間を割いていただき頂き、誠にありがとうございました!!

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

その他の回答 (3)

回答No.3

CStrinTを使う目的のみでのincludeだったら辞めて System::Stringクラスを使うと、const char* 型(Shift_JIS文字コード配列)、const wchar_t*(Unicode文字コード配列)と変換できるので、 System::StringをShift_JISに変換するところだけ、Encodingクラス(PtrToStringCharsとかMarshalクラスとかでも)で行うとか。 全部Encodingクラスでもいいですけど。

fancyoldfox
質問者

お礼

ご回答ありがとうございます。 System::StringクラスとEncodingクラスを用いても、Shift_JIS文字コード配列とUnicode文字コード配列と間の変換が可能ということですので、今後はそれらのクラスを活用したいと思います! ただ、現状といたしましては、すでにWin32コンソールアプリケーションプロジェクト下でCStirngを使用したプログラムの部品となるクラスを多数作成してしまっています。そのため、なるべくなら現在作っているプログラムまでは、CStringを使いたいというのが正直なところです…。

すると、全ての回答が全文表示されます。
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

atlstr.hをインクリュードして何を使いたかったのでしょう? .NET側で用意されているもので代用が出来るかもしれないですよ インクリュードしただけですが 関数のプロトタイプ宣言が仕様に反していればエラーになるのではと思います

fancyoldfox
質問者

お礼

ご回答ありがとうございます。 atlstr.hは、CStringを使用するためにインクルードしておりました。 CStringを使用したい理由としては、ワイド文字とマルチバイト文字の変換が、MultiByteToWideCharや WideCharToMultiByteと比べ簡単に行えるためです。 あと、関数のプロトタイプ宣言が仕様に反している場合のエラーですが、この場合エラーの内容はコマ ンドラインに表示されないのでしょうか?

すると、全ての回答が全文表示されます。
  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

手元のはVS2005Stdですが… 1>C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include\atlconv.h(90) : error C3641: 'InterlockedExchangePointer' : /clr:pure または /clr:safe と共にコンパイルされた関数に対する呼び出し規約 '__stdcall ' が無効です って感じのエラーがいくつか出ています。 CLRではそういう使い方はできない…のでしょう。 # エラーメッセージ見る限りでは呼び出し規約が違う…ということっぽいですけど。

fancyoldfox
質問者

補足

ご回答ありがとうございます。 申し訳ありません、操作のステップを一つ忘れていました。 実際には、上記の3つのステップに加え、[プロジェクトのプロパティ]->[構成のプロパティ]->[全般]->[共通言語のランタイムサポート]において、[共通言語のランタイムサポート(/clr)]を選択する必要がありました。この処理を行わないと、私の環境においても、呼び出し規約が違うというエラーメッセージが表示されておりました。

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

関連するQ&A