Activex-DLLのバージョンアップについて

解決


mitsu_124  2005-02-24 18:06:04  No: 88598  IP: [192.*.*.*]

お世話になります。

既存のActiveX-DLLプロジェクトに1つメソッドを追加して
コンパイルし、既存のDLLを上書きしたところ、
それを使用しているEXEでオートメーションエラーが
発生するようになりました。

ActiveX-DLLに変更を加えると、
それを使用しているEXEもリコンパイルしなければ
ならないのでしょうか?

#回避方法はないのでしょうか?

ご存知の方お教えくださいませ。宜しくお願いいたします。

Env = Win2k+VB6.0 SP6

From mitsu_124

編集 削除
ひろ  2005-02-24 18:52:19  No: 88599  IP: [192.*.*.*]

ActiveX DLLのコンパイル時に、バイナリ互換/プロジェクト互換/互換なし
のどれを選択したかによって変わってきます。

通常はバイナリ互換でコンパイルして、メソッド/プロパティの増減及び引数の仕様変更はプロジェクト互換でコンパイルするほうがよいでしょう。

(互換性無しだとタイプライブラリのIDが変わってしまい、レジストリの登録情報に互換性が無くなります)

編集 削除
魔界の仮面弁士  2005-02-24 18:54:33  No: 88600  IP: [192.*.*.*]

> ActiveX-DLLに変更を加えると、
> それを使用しているEXEもリコンパイルしなければ
> ならないのでしょうか?
DLL側に、きちんと「互換性」を持たせて設計すれば、
EXE側のリコンパイルは必要ありませんよ。


> #回避方法はないのでしょうか?
基礎知識が、若干不足しているように見受けられますので、
まずは、MSDNライブラリの下記の項を読まれる事をお勧めします。


[Visual Studio 6.0 ドキュメント]
└[Visual Basic ドキュメント]
  └[Visual Basic の使用方法]
    └[コンポーネント ツール ガイド]
      └[ActiveX コンポーネントの作成方法]
        └[コンポーネントのデバッグ、テスト、配置]
          └[ActiveX コンポーネントのバージョン間の互換性]

編集 削除
mitsu_124  2005-02-25 13:22:31  No: 88601  IP: [192.*.*.*]

お世話になります。
ひろさん、魔界の仮面弁士さん、回答ありがとうございます。

確かに、基礎知識が不足しておりました。
提示されたMSDNの箇所を読みました。

おっしゃるとおり
> 通常はバイナリ互換でコンパイルして、メソッド/プロパティの増減及び引
> 数の仕様変更はプロジェクト互換でコンパイルするほうがよいでしょう。
が良いということがわかりました。
(メソッド等が増えた場合のプロジェクト互換性コンパイルは、
    増えた分だけインターフェースIDが増える  と理解しました)

これから実際にテスト環境で試してみたいと思います。
どうもありがとうございました m(_ _)m

From mitsu_124

編集 削除
mitsu_124  2005-02-25 14:24:55  No: 88602  IP: [192.*.*.*]

お世話になります。

解決と書いたんですが・・・
あれからテストDLLとそれをコールするテストEXE
をつくりました。

'test_dll - test_cls
public sub test_1()
 msgbox "test_1です"
end sub

'test_exe
Private Sub Command1_Click()
Dim a As New test_dll.test_cls
    Call a.Prac1
End Sub

作成したDLLを regsvr32  で登録し、
コンパイルした test_exe を実行したところ
メッセージが表示されました。

このtest_dllに、
public sub test_2()
 msgbox "test_2です"
end sub
というメソッドを追加してコンパイルし、EXEから
コールした結果が以下のとおりです。

・プロジェクト互換  ・・・ActiveXエラーが出現
・バイナリ互換  ・・・test_1です  のメッセージが出現

プロジェクト互換は一体何のためにあるのでしょうか・・・

編集 削除
ひろ  2005-02-25 14:53:01  No: 88603  IP: [192.*.*.*]

プロジェクト互換だと、レジストリに登録されるバージョン番号が
コンパイルする毎に増えるようになっていたと記憶しています
(昔の話なのでかなりあやふやです。)

編集 削除