質問

私は、COM DLLを登録せずに.NETサービスからサードパーティのcom dll(私はその.netコンポーネントを信じていない)を使用しようとしていますが、これまでのところ運がありません。

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

例外:system.invalidcastexceptionメッセージ: "logiclib.logicclass 'のタイプのcomオブジェクトをキャストできません。この操作は失敗しました。なぜなら、IID '{aaaaaaaaaaaaaaaaaaaaaaa3e8fb4}を使用したインターフェイスのcomコンポーネントのqueryinterfaceコールは、次のエラーのために失敗しました:そのようなインターフェイスはサポートされていません(hresult:0x80004002(e_nointerface 。出典:logiclib.logicsecuredclass.connect(string ip、uint16 value、int32&result)のlogiclib.logicsecuredclass.my.server.myassembly.loader.connect()in d: myproject source server myassembly loader.cs:line line 461

アプリケーションマニフェストは、サービスを開始するexeにちなんで命名されました。また、com dllを呼び出すアセンブリにちなんで名前を付けようとしました。コマンドラインで、そしてVisual Studioのデバッガーを介して始めようとしました。また、サードパーティが提供するInteropファイルを使用して、自分のものを生成しようとしました。

(注 - 私はこれまでWindows XPでのみテストしました。)

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

役に立ちましたか?

解決

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

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

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

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

他のヒント

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

DLLが何であるか、どこで手に入れたかを提供しなかったので、使用しようとしているライブラリのドキュメントを見るのが最善です。ワイルドな推測ですが、誤って実装しているようです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top