VB6からExeclを呼出すとき、CLSIDは各バージョンで同じか?

VB6アプリを再ビルドしたいと相談があり調べました。ExeclをVB6から操作するとき、COMコンポーネント( Windows上で世界でユニークなオブジェクトを示すID:CLSIDとそのインターフェイスをレジストリに登録することで呼出すソフトウェアコンポーネント) として Execl.exe を登録して呼出すようです。※イマドキではもっと簡単に Python でも可能なようです。

Dim execlApp   As Excel.Application 
Dim execlBook As Excel.Workbook 
Dim execlSheet As Excel.Worksheet

Set execlApp = CreateObject("Excel.Application")


これをBuildする場合、Execlの本体が必要なようです。Execlはバージョン毎に収録先が異なります。Execl2024の場合、設定は以下のようになります。

紐づけられるCOMコンポーネントはバージョンが明示されています。.VBP をみると、

CLSID00020430-0000-0000-C000-000000000046 のようです。内部バージョンは 2.0

アプリが複数のWindows PCで実行されると、そのPC毎に Execl の格納先とバージョンは異なるハズです。通常この設定を行うと、アプリ実行時、このパス固定参照されるか、レジストリ上に登録されている同じコンポーネントが呼び出されます。EXECLバージョン毎にCLSIDは同じなのでしょうか? .VBP で管理されるライブラリバージョンが一致しなくても動作するのでしょうか?


オリジナルの参照設定と .VBP をみると、Execl 2007 (内部version12)でした。CLSIDは同じですが、内部バージョンは1.6 でした。


試しに Execl 2003(内部version11) を設定してみた結果です。CLSIDは同じ、内部バージョンは1.5


以下動作結果です。

PCBuild時のExecl設定呼出されたExecl
Win11 Execl2003 & 2024同居20032024
Win11 Execl2003 & 2024同居20072024
Win11 Execl2003 & 2024同居20242024
Win11 Execl2003のみ20032003
Win11 Execl2003のみ20072003
Win11 Execl2003のみ20242003

動作原理をまとめると、

  • CLSIDの一致はみるが、バージョンは照合しない。
  • 上位互換性はあり。
  • 複数Execlがインストールされている場合は、新しいExeclの方が呼び出される。
  • VB6 IDE用のExeclバージョンは問われない。

ただし、新しいExeclで追加されたオブジェクト、methodは使えないのでしょうから、開発時のExeclに近いバージョンを使った方が無難と思います。( methodインターフェイスがかわるとmethodのCLSIDが変わるが、VBAオブジェクトヘルプにもmethod毎に対応バージョンまでは明記されておらず、それらを全部調べるのは現実的ではないため )

しかしながら、.NETアプリでありながら、COMコンポーネントあわせもつEXEを作れるんですね。

Windowsで削除or圧縮してよさげな場所

クリーンアップでも消えず、弊方がファイルがたまってよく削除するフォルダの覚書です。削除によってトラブルが発生する可能性はゼロではないため、十分に試してください。

パスコメント
C:\MSOCacheMS-Offiecの何かインストラの模様、気持ち圧縮Folderにしておくと無難。
C:\ProgramData\Package Cache.NET系パッケージのinstallerの模様。win10->11時に削除TRY中。win10->11時に削除TRY中。
C:\Windows\Tempほぼほぼ支障なし
C:\Windows\Downloaded Installations気持ち圧縮Folderにしておくと無難。
C:\Windows\InstallerUninstallしないソフトなら削除していい。気持ち圧縮Folderにしておくと無難。
C:\Windows\SoftwareDistribution気持ち圧縮Folderにしておくと無難。
C:\Windows\SoftwareDistribution\Download古いものなら削除しても大体よさげ。圧縮Folderにしておくと無難。
C:\Users\*\AppData\Local\tempほぼほぼ支障なし
C:\Users\*\AppData\Local\Package Cache削除して様子見中
C:\Users\*\AppData\Local\Packages古いものなら削除しても大体よさげ。圧縮Folderにしておくと無難。
C:\Users\*\manabu_yamamoto.renesas\e2_installer\cache削除して様子見中

Windows修復でネットワークドライブが認識されないとき

Windows修復ディスクからBACKUPしたドライブイメージを回復するとき、ネットワークドライブが認識されない事象がありました。その対処メモです。

ネットワークドライブを「net use 接続先ドライブレター ネットワークドライブパス」手動接続します。

しかし 今回はWindows修復メニュー「イメージから修復」を選んでも、ネットワークドライブのディスクイメージを認識しませんでした。以前は普通にできていたときおくしているのですが、、、仕方ないので修復PCのOSを入れない方のディスクにコピーします。

HP EliteDesk 800 G1 Win10→ Win11 UPDATE メモ

そろそろWin10のままのPCのWin11化が必要です。対象機種は HP EliteDesk 800 G1 。CPUは、core i 4世代なのでWin11にできません。各種ソフトを入れなおすのは面倒です。その実施Memoです。

PCハードは別途入手が必要です。ヒューレッドパッカード:HPといえば元々はUNIXマシンの大御所です。 COMPAQを合併して今のような形になりました。昔はHP UNIXマシンでHP-UXを使うこともあり敬意を表してHP DESKTOP PCを選定しています。HP EliteDesk 800 G1 は PCie が4スロットあり全部使用、HDDは3つ使用、SDカードスロットルもよく使います。新品は予算が厳しいため、HP EliteDesk 800 G5 あたりが core i 9世代 で、数年は使えそうです。

G800 G5 のHDDは外し、G800 G1 のHDDを抜いて G800 G5 に全部差します。

PCを起動します。デバイスドライバは標準で大体あたるので、Win10で起動します。ディスプレイ解像度がリセットされるので、そこだけ変更します。

Windows11InstallationAssistant.exe をダウンロードして実行します。これで自動的にアップデートできます。これでインストールソフトを維持したままWIn11にできました。初回は「Win11と互換性がない」と怒られますが、何回か実行していると通過しました。

エクスプローラメニューが簡易表示は業務使用に耐えないので変更します。要Win再起動。

ドライブ二重表示回避の設定ももどってしまうので、もう一度実施します、

MS OfficeはPCが変わるとライセンス認証が必要となるので、再認証します。パッケージ版は問題ないですが、他のライセンスはライセンス規約を確認する必要があります。旧PCハードの添付品ならHDDを移行したことでOKとなると思います。以前の使用者がインストールされたものはNGにだと思います。

win10でスタートピンに設定していたWin10アプリグループにまとめられてしまっています。Win10アプリグループから移す必要があります。

Windows11の不便な点を処置しています。

Win11 のペイントは最低最悪です。操作性、潜在バグ、お節介盛沢山。アンインストールします。旧ペイント paint classic をインストールします。インストール済みの他Win11 PCでは以下のようにしていました。どうやってインストールしたのでしようか?

‘25.8月現在、MS Storeにおいてあった記憶がありましたが、’25.8月現在は消えています。個別サイトで ClassicPaint-1.1-setup.exe が 公開されているようです。前者は英語表記でしたが、後者は日本語表記になるようです。

ちなみにmspaint1.exe を単品コピーすると、「新しいドキュメントを作成できません」とエラーになります。

Win11 のメモ帳も使いにくなっています。MACタブのように対応したかったようですがメモ帳には不要です。

スタートメニューの「おすすめ」はデッドスペースです。履歴は非表示にできても「おすすめ」表示自体は非表示にできません。以前調べましたが、まだ非表示モードはサポートされないようですね。スタートメニューのサイズも変更できるようにしてほしいものです。

win11からエクスプローラから ディスクのクリーンアップ がなくなっています。Win11にUPDATEすると、Win10のバックアップが残ります。この削除は ディスクのクリーンアップ を直接起動して行う模様です。以下の場所から呼び出せます。

以上、Windowsそのものの設定でした。モバイル端末が個人ユーザの主流になっている今日、Windowsは仕事で使う方が多いかとおもいますす。上記のような設定に一撃で切り替えられるなど素晴らしいですね。

以下はその他の設定です。


CS+のデーモンプロセスがエラーを吐くようになりました。

以下の処置で解消しました。

新規Win11をインストールしたPCのみに発生しています。これは様子見します。

Win10を入れなおし、調査用、高リスク作業用に仕立てなおします。HP EliteDesk 800 G1 は BIOS設定で、IDEを有効無効化できるため、WinXpも動かせます。計測設備についているPCなど、どうしてもリアルWinXpが必要になる場合もありますので。

HP EliteDesk 800G5 のRS232ポートを移動する

Win11対応のため、HP EliteDesk 800G5 の RS232 ポート付きを中古購入しましたが、RS232ポート がPCIeスロットルに差さっていました。筐体には、RS232 ポートの場所がassignされているのですが、PS2のキーボードとマウスのためのようです。

PCIeスロットルは4つ使う予定なので困ります。幸い PCIe には差さっておらず別コネクタなので移動できそうです。

ボードを取り出します。PS2のキーボードとマウスのコネクタは、筐体カバースイッチと干渉するのでハンダを溶かして外します。実装が無い分には問題ないはずです。基板は目に見えないパターンもあるのでカットしない方がいいです。

筐体標準のRS232 ポートを空けます。別蓋になっていて、軽く溶接されているようです。叩くと浮くのでマイナスドライバ等でねじって金属疲労でもぎ取り、バリをヤスリで削ります。

CPUファンカバーを外して、RS232C基板を取り付けます。うまくはまりました。あとはCPUファンカバーをRS232C基板に合せてカットします。(写真は省略)

USB-RS232C変換とクロス接続して、通信テストします。送受信ともに問題ないようです。

デフォルトで COM2 に割り当てれらているので、デバイスマジャーから割当てを変更しておきます。

以上、これで普通にRS232Cが使用できるようになりました。

もしも同様もお困りで、ご自分で施工したくない方は、こちらまでご一報ください。