2011-11-17 11 views
6

私の質問は比較的シンプルなので、DLLのクラスを参照するVB6アプリケーションを作成し、そのDLLを実行時に別のものに置き換えることはできますか?DLLのクラスを使用してVB6アプリケーションを作成し、ビルド後にそのDLLをスワップアウトしますか?

私の最初の推測は... VB6ではチャンスではありません。

私の考えはVB.net interop dllに変わりました。ここでそれを行い、VBからinterop dllを呼び出すことができますか?

また、私の推測はノーとは言えませんでしたが、誰かが別のことを知っていればうれしいです。

実際に動作すると思う唯一のものは、.NetのDIですが、私は.net 2または3.5に大きなプッシュで制限されています。その可能性があるかどうかは分かりません。背景に

ので....

私は、特定のサイトが使用するDLLを持っているが、我々はすべての人にそれを出荷したいいけません。代わりに、私たちはVB6ビルドが完了するようにインターフェイスをセットアップしたクローンdllを構築したいと考えています。 それが必要なサイトに到達すると、ダミーdllを置き換えて、代わりにそのバージョンにドロップします。

注:RegFreeCOMはインストール時に使用しますので、必要に応じて再生できるマニフェストファイルがあります。

アイデアをいただければ幸いです。

ニック

+1

があなたの代わりに、DLLへのハード参照のVB6で遅延バインディングを使用できますか? –

+1

これは約10分でテストできます。 DLLプロジェクトを作成し、文字列を返す1つのメソッドで1つのクラスを置き、 "abc"を返すようにコードします。テストハーネスを作成し、参照を追加し、メソッドを呼び出して表示します。今度は新しいプロジェクトに別のdllを書いてください。同じクラス名、同じメソッド名、 "def"を返します。テストハーネスフォルダの最初のフォルダにdllをコピーし、テストハーネスを実行します。私はあなたが新しい文字列を見ると思うが、テストは信じている。 VB6がこのマシンにあれば、私はそれをやるでしょう、おそらくコメントを入力するよりも速いです。 –

+1

これは、アプリケーションではなくDLLにコードを持つ根本的な理由の1つです(コードの再利用/共有は別のものです) –

答えて

8

そのCOMのDLLの静的限りのCLSIDとインタフェースIDが両方のDLLのタイプライブラリに同じようあなたが見るように、あなたがそれらを周りに入れ替えることができ、VB6のexeファイルにリンクされていないので、フィット。 (もしVB6のdllがこれは 'バイナリ互換性'ビルドオプションとは関係ありません)

+0

ありがとうアレックス。私の争点の1つは、CLSIDとTLBIDを同一にする方法でした。バイナリ互換性は私にとってそうでした。 – Nick

1

代わりにレイトバインディングを使用して、VB6コードで直接参照するのではなく、オブジェクトを作成してからそのオブジェクトをインスタンスに設定します。 例や情報:

MVPS

Microsoft