2009-06-05 6 views
1

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

Set dotNetObj = CreateObject("Namespace.ClassName") 

私はそのクラスのどのメソッドも呼び出すことができます。

問題:私はVistaマシン上でコードを実行しようとするまで

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

「ActiveXコンポーネントはオブジェクトを作成 can`t。」

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

CreateObjectが管理者モードで動作しない理由についてのアイデアはありますか?

+0

管理シェルで、あなたのdllを登録する

してみてください。 – MegaByte

答えて

1

ユーザーのためにCOMコンポーネントが登録されていると思われます。 - 管理者が試してみると、clsidは不明です。管理者の登録/登録プロセスを実行してみてください。

は(VistaはHKCUでのCLSIDを置く?あるいは単にHKLMない?)

クイック検索には、それはそれはHKCUに見えますが有効でUACが...有効か無効かに関係していることを示しているようです...無効にされ、HKLMを調べます。したがって、HKCUにインストールする場合は、UACを無効にした管理者のためにそこには存在しません。

+1

パッケージとデプロイメントソフトウェアでInstallAllUsersプロパティをTRUEに切り替えるだけで済みました。 – MegaByte

0

これはユーザー空間にのみ登録されているためですか?私はちょうど私のパッケージと展開ソフトウェアでTRUEにInstallAllUsersプロパティを切り替えるために必要な

regasm mycomponent.dll /register /codebase /tlb

+0

.NET DLLの場合、regasmなどの可能性がより高いです... –

+0

これはCOMに準拠していますか?あなたが正しいかもしれない、私はそれを確認します – Vinzz

+0

ねえ、あなたは正しい、私は私の答えを変更します – Vinzz