.netプロジェクトでvb6 dll参照にReg-Free COMを使用するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/811894

  •  03-07-2019
  •  | 
  •  

質問

私は長い間この問題を解決しようとしてきましたが、何も機能していないようです。

vb6で作成されたCOM DLLがあります。 .netでこのDLLへの参照を追加し、参照で 'isolated'および 'copy local'プロパティをtrueに設定します。どうやらこれはreg-free comを有効にすることになっています。

しかし、動作しません。別のコンピューターで試すか、またはregsvr32でDLLの登録を解除すると、DLLにアクセスしようとすると例外がスローされます(基本的に、目的のcomクラスが存在しないと言います)。 DLLとマニフェストファイルはEXEと同じフォルダーにありますが、明らかに完全に無視されます。

間違っているのは何ですか?私はこれについてたくさんの散らばった記事を読みましたが、それらのどれも私に実用的な解決策を与えません。私はビジュアルスタジオをいじくり回していませんでした。 make-my-manifestを少しいじりましたが、機能しませんでした(テストプロジェクトでも)。

役に立ちましたか?

解決

私は非UIスレッドでcomクラスを作成して使用していました。どうやらvb6 DLLのReg-Free comはそのような状況では機能しません。このテストコードはそれを示しています:

Private Sub RunTest() Handles Button1.Click
    Try
        Dim x As New RegTestProject.RegTestCall
        MsgBox(x.RegTestFunction())
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try
End Sub

Private Sub RunThreadedTest() Handles Button2.Click
    'fails if reg-free COM is used'
    Dim t As New Threading.Thread(AddressOf RunTest)
    t.Start()
End Sub

DLLを正常に登録してこれを実行すると、両方のテストが成功します。 reg-free comを使用すると、通常のテストはまだ成功しますが、スレッドテストは失敗します。これは回避策にとって大きな痛みになると思われます。

他のヒント

この方法でCOMコンポーネントを参照すると、ビルドするたびにCOMコンポーネントのインポートが行われると確信しています。つまり、プロジェクトをビルドするすべてのマシンで、COMコンポーネントを従来の方法で登録する必要があります。

登録の使用を説明するリンク無料のcom相互運用。既にこれを行っている場合は、マニフェストファイルを投稿してください。タイプミスがあるかもしれません。

編集

アプリを新しいマシンで初めて実行するときにdllを登録する方が簡単かもしれません。登録無料のcom interoptはWindows XP以降でのみ利用可能ですので、恐竜をターゲットにした場合は動作しません。

トラブルシューティングセクションからの抜粋ですMSDN 記事(reg-free COM)。すでに見たことがあるならおologiesびします。良いニュースは、あなたがすでに手順の途中にいることです。 Windows Server 2003で問題を再現することをお勧めします( Virtual PC ?)そして、イベントログが役立ちます。

  

最初に取得する...   登録済みサーバー。その後、登録解除   サーバーとエラーを確認します   メッセージはあなたが期待したものです。そして   最後に...マニフェストを作成してデプロイする   ファイル。このようにしてトラブルシューティング   努力...に限定されます   マニフェストファイルの構造(および   アセンブリの正しい埋め込み   あなたがそうすることを選択した場合はマニフェスト)。

     

登録不要のトラブルシューティングを行う場合   COMの問題、イベントビューアー   Windows Server 2003 はあなたの友達です...   システムイベントログでCOMサーバーからのイベントを確認します。   私はあなたが見ることをお勧めしません   Windows XPイベントログ...   それは常に含まれます   メッセージ...助けにはならない   問題を特定します。

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