C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: VB6.0でのAxtiveX dllの作成


(過去ログ 17 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■6878 / inTopicNo.1)  VB6.0でのAxtiveX dllの作成
  
□投稿者/ sumomo (1回)-(2007/08/26(Sun) 01:55:59)

分類:[VB6 以前] 

はじめまして。

VB6.0にてAxtiveX dllを作成しているのですが、疑問点があり質問させていただきます。

・AxtiveX dllのリコンパイルでWindowsレジストリを汚くしない方法
 ⇒AxtiveX dllは、VB6.0でコンパイルすると自動的にクラスIDを生成し、
  コンパイル時点でWindowsレジストリに登録されると思います。
  1度コンパイルしたAxtiveX dllモジュールを、バイナリ互換でコンパイルしたと
  しても、モジュール中のメソッドが増えたり、メソッドの引数が増えたりした場合
  は、別のクラスIDが振られてしまい、それがWindowsレジストリに登録されて
  しまうのでしょうか?
  つまり意識せずに、あるモジュールAのリコンパイルを行った場合、モジュールAの
  ver1,ver2ともWindowsレジストリに登録されている状態になるとのことでよいで
  しょうか?
  
  そうであれば、以上のような現象を防ぐには以下のような方法で対処すればよろしいでしょうか?
   @モジュールAのメソッドを増やしたときは、コンパイル前にモジュールAをアンレジしてから
    コンパイルを行う。
    ※メソッドのIFに変更がなければ、バイナリ互換でコンパイルすればアンレジを行う必要なし。


  
引用返信 編集キー/
■6880 / inTopicNo.2)  Re[1]: VB6.0でのAxtiveX dllの作成
□投稿者/ まどか (365回)-(2007/08/26(Sun) 04:09:54)
#一部記憶です。(汗

>   1度コンパイルしたAxtiveX dllモジュールを、バイナリ互換でコンパイルしたと
>   しても、モジュール中のメソッドが増えたり、メソッドの引数が増えたりした場合
>   は、別のクラスIDが振られてしまい、それがWindowsレジストリに登録されて
>   しまうのでしょうか?

いいえ。
タイプID、クラスIDとも維持されます。>でないと「互換」と矛盾します。

>   つまり意識せずに、あるモジュールAのリコンパイルを行った場合、モジュールAの
>   ver1,ver2ともWindowsレジストリに登録されている状態になるとのことでよいで
>   しょうか?

上書きです。
なお、意識しないことはご法度です。徹底する必要があります。
#レジストリにごみが溜まるのはほとんどの原因はそれです。>オプションの動きの理解

>    @モジュールAのメソッドを増やしたときは、コンパイル前にモジュールAをアンレジしてから
>     コンパイルを行う。
>     ※メソッドのIFに変更がなければ、バイナリ互換でコンパイルすればアンレジを行う必要なし。

アレンジとは?>みんながわかる言葉でお願いします。

オプションの使い方としては
初回コンパイル → 互換なし
開発中 → プロジェクト互換
リリース後 → バイナリ互換
です。

引用返信 編集キー/
■6881 / inTopicNo.3)  Re[2]: VB6.0でのAxtiveX dllの作成
□投稿者/ まどか (366回)-(2007/08/26(Sun) 04:11:56)
追記。
MSDNライブラリの「ActiveX コンポーネントのバージョン間の互換性」の章を一通りお読みになってください。

引用返信 編集キー/
■6882 / inTopicNo.4)  Re[2]: VB6.0でのAxtiveX dllの作成
□投稿者/ 渋木宏明(ひどり) (314回)-(2007/08/26(Sun) 04:56:20)
渋木宏明(ひどり) さんの Web サイト
> タイプID、クラスIDとも維持されます。>でないと「互換」と矛盾します。

いや、確かVBの場合は「バイナリ互換性を云々 (^^;」というスイッチをONにしておかないと、変動したような…

引用返信 編集キー/
■6883 / inTopicNo.5)  Re[3]: VB6.0でのAxtiveX dllの作成
□投稿者/ ちゃっぴ (60回)-(2007/08/26(Sun) 05:16:08)
とりあえず参考資料のみ提供。

[VB6] プロジェクト互換とバイナリ互換の使い方
http://support.microsoft.com/kb/161137/ja

[VB6] ActiveX コンポーネントを再コンパイル時のエラー
http://support.microsoft.com/kb/258192/ja

[HOWTO] ADO を公開するコンポーネントのバイナリ互換の維持
http://support.microsoft.com/kb/195049/ja

というか、ここしばらく扱っていないので忘れていますねぇ。。。
引用返信 編集キー/
■6889 / inTopicNo.6)  Re[3]: VB6.0でのAxtiveX dllの作成
□投稿者/ まどか (367回)-(2007/08/26(Sun) 20:12:43)
No6882 (渋木宏明(ひどり) さん) に返信
>>タイプID、クラスIDとも維持されます。>でないと「互換」と矛盾します。
>
> いや、確かVBの場合は「バイナリ互換性を云々 (^^;」というスイッチをONにしておかないと、変動したような…

えっと、「バイナリ互換でコンパイルしたとしても」への返信で〜す。
引用返信 編集キー/
■6904 / inTopicNo.7)  Re[2]: VB6.0でのAxtiveX dllの作成
□投稿者/ sumomo (2回)-(2007/08/26(Sun) 23:55:05)
まどか、渋木宏明、ちゃっぴ様

お世話になります。早速のご回答ありがとうございます。
開発環境を記載していませんでしたが、OS:WindowsXP Professional 言語:VB6.0 SP6です。

> いいえ。
> タイプID、クラスIDとも維持されます。>でないと「互換」と矛盾します。
⇒MSDNを参照すると、
 そもそも、VB6.0でAxtiveX dllをコンパイルすると、以下の3つの種類のIDが振られると理解しました。
  ・コンポーネント自体に割り振られるGUID(クラスID)
  ・各インタフェースに割り振られるGUID(インタフェースID)
・各インタフェースのメソッドに割り振られるDispatchID
 バイナリ互換では、
  1)既存インタフェースのメソッドのパラメータに変更がない場合
⇒GUID,インタフェースID,DispatchIDは互換を保つ。
  2)既存インタフェースのメソッドのパラメータ、もしくはインタフェースに変更がある場合
   ⇒コンパイルしようとすると、バイナリ互換の参照ファイルとの相違があるとの警告が出る。
    警告を無視して、コンパイルした場合、GUID,インタフェースID,DispatchIDは新規に割り
    当てられる。
3)既存インタフェースのメソッドが追加された場合
   ⇒GUID,インタフェースID,DispatchIDは互換を保つ。ただし、新たに追加されたメソッドの
    DispatchIDは新規に割り当てられる。

 以上のことより、既存インタフェースのメソッド、インタフェースのパラメタに変更がある場合は、
 バイナリ互換であっても、GUID,インタフェースIDは変更されてしまうように見受けられます。
  ※すいません。今開発環境が手元にないので、明日実際にテストモジュールを作って上記のことを
   確認してみようと思います。


> アレンジとは?>みんながわかる言葉でお願いします。
⇒申し訳ありません。Windowsレジストリより対象コンポーネントの登録を解除することです。

> オプションの使い方としては
> 初回コンパイル → 互換なし
> 開発中 → プロジェクト互換
> リリース後 → バイナリ互換
> です。
⇒プロジェクト互換がまだ、イマイチつかめてませんが、もう一度MSDNを読み返してみます。

まずは、お礼と経過報告までに。

引用返信 編集キー/
■6907 / inTopicNo.8)  Re[3]: VB6.0でのAxtiveX dllの作成
□投稿者/ まどか (368回)-(2007/08/27(Mon) 09:12:56)
すいません、よく読んでいませんでした。
メソッド等の「追加」の場合だけについて書いてました。

>   2)既存インタフェースのメソッドのパラメータ、もしくはインタフェースに変更がある場合
>    ⇒コンパイルしようとすると、バイナリ互換の参照ファイルとの相違があるとの警告が出る。
>     警告を無視して、コンパイルした場合、GUID,インタフェースID,DispatchIDは新規に割り
>     当てられる。

警告は、「同じIDを維持することが出来るが既存のアプリが呼べなくなるよ、それでもいいですか?」なので
維持されます。
2つのメソッドの片方を互換性が崩れる変更をして警告をスルーしてコンパイル、
その後、参照アプリがプロジェクトの変更なしに参照および未変更のメソッドを呼べるはずです。

#いかんせん、うる覚え。。。
引用返信 編集キー/
■6911 / inTopicNo.9)  Re[3]: VB6.0でのAxtiveX dllの作成
□投稿者/ 渋木宏明(ひどり) (315回)-(2007/08/27(Mon) 09:57:34)
渋木宏明(ひどり) さんの Web サイト
>  そもそも、VB6.0でAxtiveX dllをコンパイルすると、以下の3つの種類のIDが振られると理解しました。

他に、タイプライブラリの ID も割り当てられるはずです。

タイプライブラリは、VC++ なんかでもデフォルトでは .dll 内にリソースとして格納されますが、VB の場合たぶん .dll 内にリソースとして「しか」作れないような気がします。
こいつもコロコロ変わられると、分散開発をしている場合などに非常に迷惑です。

> えっと、「バイナリ互換でコンパイルしたとしても」への返信で〜す。

あ、そういうことか。ごめんなさい。
「アレンジ」が何を指しているのか分からんかったです (^^;

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -