5

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

私はvb6で書かれたCOMDLLを持っています。.netにこのDLLへの参照を追加し、参照で「isolated」および「copylocal」プロパティをtrueに設定します。どうやらこれはreg-freecomを有効にすることになっています。

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

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

4

4 に答える 4

4

非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 を使用すると、通常のテストは成功しても、スレッド化されたテストは失敗します。これは、回避するのに大きな苦痛になるようです。

于 2009-05-24T16:29:23.003 に答える
3

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

于 2009-05-01T15:54:20.303 に答える
2

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

編集

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

于 2009-05-01T15:52:15.190 に答える
2

以下は、 reg-free COM に関するMSDN記事のトラブルシューティングセクションからの抜粋です。既にご覧になっていたらすみません。幸いなことに、あなたはすでにステップの途中まで進んでいます。問題を Windows Server 2003 (おそらくVirtual PCで?) で再現すると、イベント ログが役立つはずです。

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

登録不要の COM の問題をトラブルシューティングするときは、Windows Server 2003 のイベント ビューアが役に立ちます。システム イベント ログで、COM サーバーからのイベントを探します。Windows XP のイベント ログを確認することはお勧めしません...常にメッセージが含まれています...問題の特定には役立ちません。

于 2009-05-01T19:42:55.760 に答える