お世話になります。
既存のActiveX-DLLプロジェクトに1つメソッドを追加して
コンパイルし、既存のDLLを上書きしたところ、
それを使用しているEXEでオートメーションエラーが
発生するようになりました。
ActiveX-DLLに変更を加えると、
それを使用しているEXEもリコンパイルしなければ
ならないのでしょうか?
#回避方法はないのでしょうか?
ご存知の方お教えくださいませ。宜しくお願いいたします。
Env = Win2k+VB6.0 SP6
From mitsu_124
ActiveX DLLのコンパイル時に、バイナリ互換/プロジェクト互換/互換なし
のどれを選択したかによって変わってきます。
通常はバイナリ互換でコンパイルして、メソッド/プロパティの増減及び引数の仕様変更はプロジェクト互換でコンパイルするほうがよいでしょう。
(互換性無しだとタイプライブラリのIDが変わってしまい、レジストリの登録情報に互換性が無くなります)
> ActiveX-DLLに変更を加えると、
> それを使用しているEXEもリコンパイルしなければ
> ならないのでしょうか?
DLL側に、きちんと「互換性」を持たせて設計すれば、
EXE側のリコンパイルは必要ありませんよ。
> #回避方法はないのでしょうか?
基礎知識が、若干不足しているように見受けられますので、
まずは、MSDNライブラリの下記の項を読まれる事をお勧めします。
[Visual Studio 6.0 ドキュメント]
└[Visual Basic ドキュメント]
└[Visual Basic の使用方法]
└[コンポーネント ツール ガイド]
└[ActiveX コンポーネントの作成方法]
└[コンポーネントのデバッグ、テスト、配置]
└[ActiveX コンポーネントのバージョン間の互換性]
お世話になります。
ひろさん、魔界の仮面弁士さん、回答ありがとうございます。
確かに、基礎知識が不足しておりました。
提示されたMSDNの箇所を読みました。
おっしゃるとおり
> 通常はバイナリ互換でコンパイルして、メソッド/プロパティの増減及び引
> 数の仕様変更はプロジェクト互換でコンパイルするほうがよいでしょう。
が良いということがわかりました。
(メソッド等が増えた場合のプロジェクト互換性コンパイルは、
増えた分だけインターフェースIDが増える と理解しました)
これから実際にテスト環境で試してみたいと思います。
どうもありがとうございました m(_ _)m
From mitsu_124
お世話になります。
解決と書いたんですが・・・
あれからテスト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です のメッセージが出現
プロジェクト互換は一体何のためにあるのでしょうか・・・
プロジェクト互換だと、レジストリに登録されるバージョン番号が
コンパイルする毎に増えるようになっていたと記憶しています
(昔の話なのでかなりあやふやです。)
ツイート | ![]() |