44

独自の C++ COM コンポーネントを使用する大規模な C# (.net 2.0) アプリと、同じく COM 経由でアクセスされるサードパーティの指紋スキャナー ライブラリがあります。本番環境では、独自の C++ COM コンポーネントからのイベントが発生し、正常に受信されたにもかかわらず、フィンガープリント ライブラリからの一部のイベントが C# アプリに発生しないという問題が発生しました。

MSINFO32 を使用して、動作中のシステムにロードされているモジュールと障害が発生しているシステムのモジュールを比較すると、STDOLE.DLL が GAC になく、障害のあるプロセスにロードされていないことが原因であることがわかりました。

このファイルを GAC にドラッグすると、フィンガープリント COM ライブラリからイベントが正常に返されました。

では、stdole.dll は何をするのでしょうか? サイズは 16k なので、それほど多くはありません... STDOLE32 のような別のライブラリへの何らかのリンクですか? その不在はなぜそのような奇妙な行動を引き起こすのでしょうか?

stdole.dll の配布方法 これは XCOPY デプロイ アプリであり、GAC は使用しません。それをリソースとしてパッケージ化し、System.EnterpriseServices.Internal.Publish.GacInstall を使用して GAC にあることを確認する必要がありますか?

4

7 に答える 7

23

stdole.dll はプライマリ相互運用アセンブリのようです。MSDN の Office 2003 Primary Interop Assemblies を参照してください。

于 2008-10-02T12:51:47.873 に答える
2

私も同じ問題を抱えていました。アプリケーションから参照を削除して再コンパイルしました。合格したすべてのテストを実行します。次に、dllなしで再デプロイすると、すべて機能しました。

そもそもこれへの参照がプロジェクトでどのように取得されたのかわかりません。レガシーアプリなので、ずっと前にあったに違いありません。

サイモン

于 2010-04-03T08:51:05.830 に答える
0

stdoleのプロジェクトへの参照も追加する必要がありました。私はそれへの参照を持っていませんが(それは単純な画像アプリです)、私たちのユーザーの2人はそれが欠落しているというエラーを受け取っていました。これが3.5アプリの場合、.net2.0のみを実行していた可能性があります。私はその理由を理解しました。

また、[プロジェクトのプロパティ]タブで公開し、[アプリケーションファイル]を選択して、展開する標準ファイルを含めました。うまくいけば、それはうまくいくでしょう。

于 2009-08-19T15:24:26.203 に答える
0

私たちのプロジェクトでは、IDispatch は stdole.dll を使用しています。オブジェクトに変更して IDispatch を削除し、参照から stdole を削除しました。

于 2013-06-07T09:32:11.890 に答える