理想的には、リーダーはネイティブC++プログラムをOpenClipboard()ブロックを含むVisualStudio2008にアップグレードしました。OpenClipboard()から正常なリターンコードを取得した直後にブレークポイントを設定して、コードをステップ実行してみませんか。インターネットによると、それはあなたのシステムで動作するかもしれませんが、もちろん、私のものではなく、試してくれてありがとう。
たとえば((OpenClipboard 1418 vc6))をグーグルで検索すると、「GetClipboardDataはデバッガーで失敗します」や「VC ++ 6ではエラーは発生しませんが、VC++2005ではエラーが発生します」などの記事が見つかります。実用的には、問題は解決しました-そのようなコード内にブレークポイントを設定することはできません。クリップボードの操作が完了した後、情報をリスしてブレークポイントを設定する必要があります。エラー1418は「スレッドでクリップボードが開いていません」ですが、VS.NETを使用しない限り、またはクリップボード-オープン-クローズ-ブロックの外側にブレークポイントを保持する場合は、正常に機能します。
VS.NETデバッガーの正確な問題が何であるかを知ったほうがよいと思います。
C ++の人間である私は、dot-Netを実行するときに、スレッドの観点から考える必要がないことをぼんやりと認識しています。とにかく、実際に問題が、ネイティブC ++コードをシングルステップで実行したときに、dot-Netデバッガーがスレッド情報に微妙に干渉していることであるかどうかにかかわらず、実際に何が起こっているのかについての第一人者品質の説明は見つかりませんでした。
システムに関して:XP-proによると、約1年前、2つのデュアルコアXeon、4つのCPU。XP-SP2-32ビットのvc6でシングルステップでコードをデバッグし終えたところです。だから私はコードがvc6の下でかなりうまくいったことを知っています。ただし、10メガバイトのCF_TEXTでテストしたところ、例外が発生しました。XP-x64のより良い例外モデルの下でデバッグを試してみようと思いました。
visual-studio-2008で再コンパイルしたところ、コードをシングルステップにすることができませんでした。OpenClipboardは機能しましたが、EnumClipboardFormats()は機能せず、シングルステップでは何も機能しませんでした。ただし、コードの完全なブロックの下にブレークポイントを設定すると、すべてが正常に機能しました。そして、はいvc2008は、szBufの周りのピンポイント診断のスタックフレームの破損を引き起こしました。vc2008については好きなことがたくさんあります。これがどういうわけか単なるクリップボードの問題であるとしたら、スレッドコンテキストの問題がdot-Net-debuggerに起因するかどうかにかかわらず、何かをステップスルーすることを心配せざるを得ないと感じることなく、それは素晴らしいことです。