1


0

VistaでのVB6 .NET相互運用性の問題

私はC#でアセンブリを書き、VB6.0アプリケーションからDLLのメソッドを呼び出す必要がありました。 私はDLLをCOMに準拠させ、それに従ってDLLを登録しました。 VBアプリケーションから、VB6.0の `+ CreateObject +`メソッドを使用して、.NETアセンブリのクラスをインスタンス化します。

Set dotNetObj = CreateObject("Namespace.ClassName")

そのクラスの任意のメソッドを呼び出すことができます。

問題:

私がVistaマシン上でコードを実行しようとするまで、すべてうまくいきました。 私はexeファイルを実行するたびにそれは正常に動作しますが、exeファイルが「管理者として実行」オプションを使用して実行されるたびに次のエラーが表示されます。

_ 「ActiveXコンポーネントはオブジェクトを作成できません。」 _

このEXEを管理者モードで実行する必要があります。そうしないと、レガシシステムの特定の領域が機能しません。

管理モードで `+ CreateObject +`が機能しない理由についてのアイデアはありますか?

2 Answer


1


COMコンポーネントは_user_にしか登録されていないようです。 - そのため、管理者が試したときには、clsidは不明です。 管理者のためにあなたのisntallation / registrationプロセスを実行してみてください。

(VistaはHKCUにclsidを入れますか? または単にHKLM?)

クイック検索は、UACが有効か無効かに関係していることを示しているようです…​ それが有効になってHKCUに見えます…​ 無効にして、それはHKLMに見えます。 あなたがHKCUにインストールしているのであれば、UACが無効になっている管理者のためにそこにはありません。


0


ユーザー空間にしか登録されていないのですか

管理シェルにあなたのdllを登録してみてください

+ regasm mycomponent.dll / register / codebase / tlb +