2011-01-12 9 views
4

古いwrapped activeXコントロール(ComponentOneのVSPrinter 8、正確にはvsprint8.ocx)を使用するWindowsアプリケーション(.net、VS2010)があります。 )。これにより、すべての印刷プレビューと印刷プレビューが処理されます。アプリケーションをVM(32ビット)上のWin7の新しいインスタンスに展開して実行し、このコントロールを呼び出そうとすると、次のエラーが発生します。Win7上で "protected memoryの読み込みまたは書き込みを試みました" - activeXコントロールのエラー

"保護されたメモリを読み書きしようとしました。これはしばしば、他のメモリが壊れていることを示しています。

Windows XPでもうまく動作します。興味深いことに、ターゲットVM(システム全体でAlwaysOffに設定)でDEPをオフにすると、アプリケーションが機能します。しかし、ocxを使用する実行可能ファイルだけでDEPを無効にすると、動作しません。

アイデア?ありがとう!

答えて

5

解決策が見つかりました。

私は効果的に問題の実行可能にDEPをオフにすることができませんでしたので、私はVS2010でビルド後のイベントコマンドラインに次の行を追加し、それは私の問題を修正:VSで

call "$(DevEnvDir)\..\..\VC\bin\vcvars32.bat" 
call "$(DevEnvDir)\..\..\VC\bin\editbin.exe" /NXCOMPAT:NO "$(TargetPath)" 

ソリューションエクスプローラで、ソリューションの下のプロジェクトを右クリックし、[プロパティ]を選択し、[イベントを作成]をクリックします。上記のものをプラグインする場所である「ビルド後のイベントコマンドライン:」テキストボックスが表示されます。

これは私のアプリケーションのDEPを効果的に無効にします。ここに私が光を見るのを助けたブログ記事があります。ありがとう、ランダムな男!

http://jtstroup.net/post/Attempted-to-read-or-write-protected-memory-This-is-often-an-indication-that-other-memory-is-corrupt.aspx

+1

あなたの質問への答えとして、あなたの答えを受け入れることを忘れないでください。 ;> – dthorpe

+1

もう1つの興味深いシワがTFSチームビルドサーバーで発生しました。 Msbuildは(DevEnvDir)Visual Studio環境変数を解決できず、継続的な統合ビルドが失敗します。この問題を回避するために、システムレベルの環境変数を追加して、DevEnvDirのグローバル値を設定しました。 DevEnvDirの値は、x64の場合は「C:¥Program Files(x86)¥Microsoft Visual Studio 10.0¥Common7¥IDE」、32ビットの場合は「C:¥Program Files¥Microsoft Visual Studio 10.0¥Common7¥IDE」です。それは一種のハッキリのようだったが、うまくいった。 – Booberry

関連する問題