2017-12-06 11 views
-1

私は自分のアプリをx86としてコンパイルしました。 私のアプリケーションでVB6 COM Interopを使用しています。 「Interop Interp type = Yes」、「Isolated = No」の参照を設定しました。埋め込みInteropクライアントマシンのREGDB_E_CLASSNOTREGエラー

クライアントマシンには何もインストールする必要はありません。「Interop.MyDLL.dll」をインストールする必要はありません。インストールすることなく魔法のように動作します。

これは私のテストコンピュータで簡単にテストできますが、うまく動作します。

今、クライアントマシンで、DLLにアクセスしようとすると、エラー "System.TypeInitializationException、クラスが登録されていない、HRESULT:0x80040154(REGDB_E_CLASSNOTREG)"がスローされます。

私は、アプリケーションを再コンパイルして展開した後に発生しました。それ以前はうまくいきました。

ここでは何が原因でしょうか?

+1

interop dllを登録する必要はありません(COMコンポーネントではなく、メタデータ定義のみ)。しかし、VB6 COMコンポーネント(dll、ocxなど)を登録する必要があります。魔法はありません。 –

+0

@SimonMourier OMG、そうです。それは何年か前にテストマシンでSysWow64にインストールしたので、必要なことに気がつかなかった。どうもありがとうございます! – tmighty

+0

おそらくあなたはあなたのコメントを返信することができます。それから私のような他の人形が答えを見つけることができます。 – tmighty

答えて

1

COMには「魔法」はありません。あなたはVB6 COMコンポーネント(dll、ocxなど)を登録する必要があります。

interop .NET dllはCOMコンポーネントではなく、.NETからCOMへのメタデータ/バインディングのみを含んでいるため、登録する必要はありません。

PS:実際には、あなたはを登録するを持っていない、あなただけのクライアントにあなたを見つけるための方法を提供する必要があるので、そこRegistration-Free Activation of COM Components: A Walkthroughを使用する可能性もありますが、単に登録より多くの作業することができdllの束。

関連する問題