2

WPF アプリケーションを起動し、InitializeComponent1 つのユーザー コントロールの関数呼び出しに移行すると、サイレントに終了し、出力ウィンドウに Managed (v4.0.30319)' has exit with code -1073740771( 0xc000041d) というメッセージが 1 つだけ残ります。「静かに」と言うとき、このInitializeComponent呼び出しをブロックでラップしても例外がキャッチされないことを意味しますtrycatchこれが通常、問題の場所を見つける方法です)

私が行ったことは次のとおりです。このアプリケーション プロジェクトでは、バージョン番号 10.0.4504.0 の参照 Microsoft.Office.Interop.Owc.dll を使用する必要があります。これは相互運用ライブラリであるため、VS2012 にこの参照を追加すると、プロパティが自動的にEmbedded Interop Typestrue に設定されます。これは、個々の dll を出力フォルダーに保持せず、代わりにこのライブラリをメイン出力に埋め込むことを意味すると想定しています (少なくともこれは、Microsoft.Office.Interop.Outlook.dll などの他の参考文献で見られる方法です)。ただし、プロジェクトを開始すると、次のようなXamlParseExceptionことわざがスローされます。

"ファイルまたはアセンブリ 'Microsoft.Office.Interop.Owc, Version=10.0.4504.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' またはその依存関係の 1 つを読み込めませんでした。指定されたファイルが見つかりません。":"Microsoft.Office .Interop.Owc、バージョン = 10.0.4504.0、カルチャ = ニュートラル、PublicKeyToken = 31bf3856ad364e35""

参照が埋め込まれていないようです(またはバージョンが正しくありません。ただし、参照バージョンが実際に10.0.4504.0であることを確認しました)

次に、この dll を出力フォルダーに直接コピーして、bin\Debug\このライブラリが確実に見つかるようにしました。今回は例外はスローされませんが、最初に説明したように、アプリケーション全体が静かに終了します。-1073740771コード( )をググってみました0xc000041dが、それに関する記事はありません。Embedded Interop Typesをtrue/falseに設定しようとしましたが、問題は同じです。

アップデート:

ここにさらに説明を追加したいと思います。前述のとおり、問題のあるライブラリは OWC(Office Web Component)10 です。このリンクに従って、OWC を VB.NET デスクトップ アプリケーションと連携させました: HOW TO: Visual Studio .NET で Office Web コンポーネントのイベントを処理します。しかし、この公式記事はとても古いので、ラッパー dll をコンパイルするために多くの変更を加える必要がありました (主に名前空間の不一致のため)。次に、実際の相互運用ライブラリ Microsoft.Office.Interop.Owc への参照を追加するときに、既定の設定に従って埋め込み相互運用型を True にすると、実行時にエラーが発生します (XamlParseException) アセンブリをロードできません (上記の説明を参照)。なんてこったい?「埋め込み」として作成すると、このライブラリが確実に見つかると思いました。次に、このdllを出力フォルダーにコピーすると、このサイレント終了の問題が発生します。ただし、今回は出力ウィンドウにMicrosoft.Office.Interop.Owc.dllが実際にロードされていることが示されていることに注意してください。実際には、メッセージの前の最後のmanaged has exitedメッセージです。したがって、それはまだこのライブラリに関連している必要があります。

これはすべて OWC10 でのみ発生します。OWC11 (最新ですが、残念ながら Office2003 に付属しているため、残念ながらかなり古いバージョンです) にも同様の方法があります。HOW TO: Visual Studio .NET で Office 2003 Web コンポーネントのイベントを処理する しかし、実際には機能し、アプリケーションにコントロールが表示されます。OWC11の代わりにOWC10を試したかったのは別の理由によるものです

4

2 に答える 2

1

WPF アプリケーションを起動し、1 人のユーザー > コントロールの InitializeComponent 関数呼び出しに移動すると、サイレントに終了し、出力ウィンドウに Managed (v4.0.30319)' has exit with code -1073740771 (0xc000041d) というメッセージが 1 つだけ残ります。「静かに」と言うときは、この InitializeComponent 呼び出しを try-catch ブロックでラップしても例外がキャッチされないことを意味します (これは、通常、問題がどこにあるかを見つける方法です)

次に、この dll を出力フォルダー bin\Debug\ に直接コピーして、この >library を見つけられるようにしました。今回は例外はスローされませんが、最初に説明したように、アプリケーション全体が静かに終了します。コード -1073740771 (0xc000041d) をグーグルで検索しようとしましたが、それに関する記事はありません。Embedded Interop Types を true/false に設定しようとしましたが、問題は同じです。

今日、「コード-1073740771(0xc000041d)で終了しました」というまったく同じことが起こりました。(これは、VB と C# .NET WinForms アプリケーションの両方で発生しました)。デバッグを試みたところ、Form_Load コード ブロックにすら入っていないことがわかりました。

Visual Studioを管理者として実行することで、最終的にこれを「解決」しました(そして、メニューからプロジェクトを開いてビルドして実行するだけです)。これは win8 のセキュリティの問題であり、どこにも詳しく説明されていません。(気が散って、タスクバー/ソリューションファイルから特定のプロジェクトを直接開いたところ、これが発生しました)。

あなたはおそらく今までにこれを自分で見つけたでしょう。髪の毛を失っていないことを願っています:) どこかでこのエラーが発生している可能性のある他の人のためにこれを指摘するだけです.

于 2014-10-28T19:03:20.513 に答える
0

この問題もあり、x64 プラットフォームではコード -1073740771 (0xc000041d) で「サイレント」終了し、x86 プラットフォームではすべて問題ありませんでした。

私のアプリケーションの一部はアンマネージ C++ で、別の部分は C# です。私の C++ コードは、x64 プラットフォームに完全に対応していないことが判明しました。私の場合、次の変更により問題が修正されました。

// before
g_OrigWndProc = reinterpret_cast<WNDPROC>(::SetWindowLongPtr(hWnd, GWLP_WNDPROC,
                reinterpret_cast<LONG>(WindowProc)));

// fixed version
g_OrigWndProc = reinterpret_cast<WNDPROC>(::SetWindowLongPtr(hWnd, GWLP_WNDPROC,
                reinterpret_cast<LONG_PTR>(WindowProc)));

したがって、一般的な推奨事項は、コードが x64 プラットフォームに完全に対応していることを確認することです。

于 2015-04-09T20:59:47.537 に答える