2017-01-26 36 views
3

VB6で使用する必要があるC#アセンブリがあります。以前のマシン/ OSでこれを動作させていましたが、現在のWindows 10マシンでは、VB6/VS6 IDEでデバッグするときに動作させることができません。たびに、私はラインをヒット:VB6アプリケーションでは、c#dllのCreateObjectがIDEで "ActiveXコンポーネントはオブジェクトを作成できません"というエラーが発生します

Set interop = CreateObject("BTR.Core.Interop.Activator")

私が受け取る「ActiveXコンポーネントはオブジェクトを作成できません。」エラー。

コンパイルされたVB6アプリケーションを実行すると、すべて動作します。だから、VB6/VS6 IDEに関するどこかの権限の問題でなければなりません。

私はregasmの32ビット版を使用するように言及している他の投稿を見つけました。私はregasmC:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exeの両方を無駄にしようとしました。

コンパイルされたVB6アプリケーションを実行すると(そしてアプリケーションとVB6アプリケーションが以前のマシンで動作していたため)、C#DLLをCOMに公開するためのすべての設定が正しいことがわかりましたが、もし誰かがそれが適切だと思うなら、それについての詳細を掘り下げて幸せです。

この記事(Late binding run-time error in VB6 when creating an object from a .NET assembly)は、regasmを実行した後にレジストリに何が含まれるべきかについて話しています。すべての設定はWOW6432NODEキー

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID\{2942ED53-BBC4-311D-9840-1FE610885592}にあります。

ある種の32/64ビットの競合があるかどうかはわかりません。どんな提案も感謝しています。

+0

VBPファイルのCOM参照がアプリ​​ケーションのコンパイル時と同じであることは確かですか? VBP内の参照が.NETコード/アセンブリで指定されたインターフェイスと一致しない場合、このエラーが発生する可能性があります。 – DaveInCaz

+0

私はリファレンスを持っていませんでした。私はレイトバインディングのCreateObjectをやっています。だからこそ私はtlb参照を最初から追加しようとしていることについて懐疑的でした。奇妙な。 – Terry

答えて

3

まあ、私は解決策を見つけました。それが正しいかどうかはわかりません。しかし、タイプライブラリを作成してVB6でそれを参照するために/tlbパラメータでregasmを実行することについて話したこの問題に似た他の投稿を見つけました。アプリケーションを別のマシンにデプロイしたときにその参照をしたくないので、アドバイスを無視しました。

最後に、このパラメーターを使用して型ライブラリを参照し、VB6 IDEデバッグが機能することにしました。

しかし、の奇妙なの部分(私にとっては良い)は、私は参照を削除し、VB6 IDEは引き続き動作します。だから何とかして、VB6でリファレンスを追加すると、リファレンスを削除した後でも、IDEで動作しているときに動作するようになっていました。

これは、新しいWindowsオペレーティングシステムでVB6アプリケーションを管理している他の人に役立ちます。

+0

TLBが正しく登録されていない可能性があります。後期バインディングは、AFAIKに依存しています。 regasmステップはそれを修正したかもしれない。また、VB6 IDE自体が自動的にDLLを登録することもあります。その2つのうちの1つがそれを達成したに違いありません。 – DaveInCaz

+0

これはVB6だったはずです...私はregasmを行い、TLBを作成してVB6で参照として追加するまで動作しませんでした。 – Terry

関連する問題