4

COMDLLを登録せずに.NETサービスからサードパーティのCOMDLL(.NETコンポーネントだとは思わない)を使用しようとしていますが、今のところ運がありません。

ここ(http://stackoverflow.com/questions/465882/generate-manifest-files-for-registration-free-com)からマニフェストファイルをコピーして、開始点として使用しました(COMDLLマニフェストを生成しました参照されるmt.exe/zippy42.exe)。しかし、私が得るのは次のエラーだけです:

例外:System.InvalidCastExceptionメッセージ:タイプ'LOGICLib.LogicClass'のCOMオブジェクトをインターフェイスタイプ'LOGICLib.ILogic'にキャストできません。IID'{AAAAAAAA-AAAA-AAAA-AAAA-AAAAAA3E8FB4}'のインターフェイスのCOMコンポーネントに対するQueryInterface呼び出しが、次のエラーのために失敗したため、この操作は失敗しました:そのようなインターフェイスはサポートされていません(HRESULTからの例外:0x80004002(E_NOINTERFACE)) 。ソース:D:\ MyProject \ Source \ Server \ MyAssembly \ Loader.cs:lineのMy.Server.MyAssembly.Loader.Connect()のLOGICLib.LogicSecuredClass.Connect(String IP、UInt16 Value、Int32&Result)のInterop.LOGICLib 461

アプリケーションマニフェストは、サービスを開始するexeにちなんで名前が付けられています。また、COMDLLを呼び出すアセンブリにちなんで名前を付けてみました。コマンドラインから始めて、VisualStudioのデバッガーを使用してみました。また、サードパーティから提供された相互運用ファイルを使用して、独自のファイルを生成してみました。

(注-これまでのところ、Windows XPでのみテストしました。)

私は今これに2日間を費やしましたが、まったく進歩していません。私が見逃したかもしれないアイデアはありますか?

4

2 に答える 2

4

アプリケーションマニフェストは、サービスを開始するexeにちなんで名付けられています

はい、これは機能しません。Windowsは常に、管理されていないリソースとして埋め込まれているEXE自体のマニフェストを探します。そこに1つが見つからない場合にのみ、ディスク上の.manifestファイルを検索します。問題は、VS2008以降で構築された管理対象プログラムにすでにマニフェストがあることです。デフォルトのものは「私はVistaに対応しています」とだけ言っています。

これは、[ファイル]+[開く]+[ファイル]を使用してEXEを選択することにより、自分で確認できます。RT_MANIFESTノードを開き、リソース1をダブルクリックします。reg-freeCOMマニフェストエントリが表示されない場合は、機能しません。

修正するには、プロジェクト+新しいアイテムの追加を使用して、アプリケーションマニフェストファイルアイテムテンプレートを選択します。ボイラープレートマニフェストを取得し、そこにregfreeCOMエントリをコピーして貼り付けます。

于 2011-01-19T15:43:48.027 に答える
-1

例外として、LogicClassタイプのオブジェクトをILogicのインターフェイスタイプにキャストしようとすると、キャストエラーが発生します。LogicClassはILogicを実装していないようです。

DLLが何であるか、またはどこで入手したかを提供しなかったため、使用しようとしているライブラリのドキュメントを確認することをお勧めします。ただの大げさな推測ですが、正しく実装していないようです。

于 2011-01-19T14:04:34.433 に答える