2009-05-01 19 views
4

私は長い間この問題を解決しようとしてきましたが、何も動作していないようです。.NETプロジェクトでvb6 dll参照にReg-Free COMを使用するにはどうすればよいですか?

私はvb6で書かれたCOM DLLを持っています。私はこのDLLへの参照を 'isolated'と 'copy local'プロパティをtrueに設定して.netで.netに追加します。どうやらこれはregフリーのcomを有効にするはずです。

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

私は間違っていますか?私はこれについての散らばった記事のトンを読んだが、それらのどれも私に実用的な解決策を与えていない。私はビジュアルスタジオを使って無駄にしました。私はmake-my-manifestを使って少々修正しましたが、(テストプロジェクトでさえ)うまく動作しませんでした。

答えて

4

私は非UIスレッドでcomクラスを作成して使用していました。どうやら、reg-Free comはvb6 DLLで動作しません。このテストコードは次のように表示します。

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を使用すると、通常のテストが成功してもスレッドテストは失敗します。これは回避するには巨大な痛みになるように見えます。

+0

これは、非uiスレッドがデフォルトでMTA対STAスレッドとして作成されるという事実に関連しているかどうかを知りましたか? –

+0

いいえ、私はすべてのCOM呼び出しがUIスレッドから来たことを確認することで問題を回避しました。私はこの問題をMicrosoftに報告し、そこにいる誰かがテストdllの問題を修正した例を挙げましたが、この問題は修正するほど優先順位が高いとは言えませんでした。 –

+1

Strilancのディスカッションへのリンク:https://connect.microsoft.com/VisualStudio/feedback/details/457217/reg-free-com-fails-when-threaded#tabs – tofutim

2

linkには、登録無料の相互運用機能の使用方法が記載されています。すでにこれを行っている場合は、マニフェストファイルを投稿してください。不足しているタイプミスがあるかもしれません。

編集

だけ考えただけで、DLLにアプリは新しいマシン上で動作する最初の時間を登録する方が簡単かもしれません。無料のCOM interoptの登録は、Windows XP以降でしか利用できませんので、恐竜をターゲットにしていれば動作しません。

3

このようにCOMコンポーネントを参照すると、ビルドするたびにCOMコンポーネントのインポートが行われることは間違いありません。つまり、プロジェクトが構築されるすべてのマシンにCOMコンポーネントを従来の方法で登録する必要があります。

2

reg-free COMのMSDN articleTroubleshootingセクションの抜粋です。あなたがすでにそれを見たことがあれば謝ります。良いニュースは、あなたがすでにステップを通っているということです。 Windows Server 2003(おそらくVirtual PC?)の問題の再現を示唆し、イベントログが役立つはずです。

最初に取得したクライアント 登録済みのサーバー。 サーバーの登録を解除し、エラー メッセージが予期したものであることを確認してください。最後に ... craftとdeployマニフェスト ファイルを展開します。このようにして、トラブルシューティング の取り組みは、マニフェストファイルの 構造に限定されます(また、 マニフェスト マニフェストの埋め込みが正しく行われます)。

のWindows Server 2003に登録フリー COMの問題、イベントビューアのトラブルシューティングCOMサーバーからのイベントのためにシステムイベントログに 見て...あなたの友達です。 Windows XPのイベントログ... を見ると、常に というメッセージが含まれていますが... で問題を特定できません。

関連する問題