読者です 読者をやめる 読者になる 読者になる

ふむ…

昨日ハマったAPIって
unicode対応の静的リンクとか
コンパイル環境とかするだけじゃ
結果の正誤が安定してない…

どうもAPI内部処理が
レジストリのどこからか
探してくる過程で
何らか違う結果をヒットさせてるっぽい

特定のものは正しい結果が返ってくるけど
特定のものだと何か違うものをかえしてくる

内部でレジストリから探す
何らかの思想が有って
それがAPIの名前とは反して
意図通りとは限らないっぽい

ゴリゴリと自分で書きた方が
良かったかもしれないな(´・_・`)

基本
ちゃんと予め手法が用意されてるなら
そこは手前勝手なコーディングはしない
きちんと用意された手法に従う

そういうスタンスなのだけれども

このAPIに関しては
どうにもこうにも
使い勝手が悪いし
アウトプットの正誤が保証出来ない

オブジェクト指向
初期に出来た過渡期のAPI群だから

多分
OLEとかCOMとかActiveXとか
仕様がしっかり定まらなかった頃に
当初の想定してたレジストリ用途で
うまく探せてたAPIかなぁ…

特定のものだけは
アウトプットが正解だし…

逆に特定のものは
アウトプットが不正解だし…

多分いくつかのレジストリ階層を
キーだけじゃ無くて
サブキーやパラメータまで探してて
不正解までヒットさせてしまうっぽい

多分
初期に想定されてる仕様とは
今のレジストリ構成が大分変わったんだなぁ…

古い技術で
OLEとCOMとActiveX
目的はすごく似てても
生まれた経緯とか時期が
少しずつ異なる技術で
相互に技術を相乗りしてるけれども
そこら辺に落とし穴が有る

今日の
レジストリが肥大化してる
根幹に有るのも
CLASSES_ROOTに
色々突っ込んでるからだし
過去からの互換性とか
様々なインターフェース実装を備えて
どれも損なえないから
色々な階層に点在して同様な参照が
散らばってる

ここを決まった規則で
いくつかの階層を順番に探すのは
本来ならばきちんと手順化されてて
APIかサブセットが用意されていて
関数一発で誰にでも同じ結果が伴うもの
そうで有って欲しいところなんだけれども…

どうにも
OLEとかCOMとかActiveXとか
type libraryのサブセットとか
OLEのサブセットとか
API群とか
オブジェクト関数とか
クラス実装インターフェースとか
関係してるもの全てやってみたけど
結果はマチマチ
どれも万能薬では無い(´・_・`)

でもオブジェクト関数からだと
如何なる同義なキーワードに変えても
キチンと
late binding 出来てるんだよなぁ
謎だ…

多分
オブジェクト関数の中身は
簡単な機構では無いのだろう
OLEでもクラスでもコンポーネントでも
ファイルでもオブジェクトでも
それらのバージョン違いでも
バージョン指定でも
ProgIDでも
如何なる種別のモノを指定されても
確実に探してきて
インスタンスを生成出来るように
それら全てのレジストリ
システムフォルダーを探してる

簡単に
API関数やサブセットのメソッドで
ポンと実現されてる様な
簡単な機構じゃないな(´△`)

オブジェクト関数とは
逆なシーケンスな手順する様な事になる
必要が有って

まぁ
普通は
互換性維持とかローカライズとかするのに
ニーズ有りまくりな事だし
オブジェクト関数かサブセットかAPI
簡単に用意されてるだろうと思ってたけど

まさかの用意されて無い!!(´△`)

オブジェクト関数って
実は物凄く複雑なメカニズムで
とても良く出来てる
完成度だったんだなんだなぁ…

オブジェクト関数って
誰もが必ず使う関数で
頻繁に使うお手軽関数なんだけど…

まさかの
凄く高度なメカニズムで出来てる関数
だったんだなぁ…

確かに考えて見れば
バージョン違いとか
CPUのアドレッシングビット長のちかとか
オブジェクトの種族の違いとか
インストール先とか
同義名参照とか
インターフェースの動的な特定とか
バインディングやプロセス間通信とか
メモリモデルとかスレッドモデルの
様々な技術が何もかも詰まってるのが
オブジェクト指向を実現する為に必要な訳で

確かに単一の
シンプルな仕掛けでは事が済まないな
OLEとCOMとActiveXとクラス実装とか
同じ目的な似た技術が乱立してて
更には同義名での参照とか
色々出来ちゃう訳で

全部てんこ盛りしてる訳だから

どんなオブジェクトでも
オブジェクト関数1つで
簡単にインスタンス生成出来ます
ってなると

とてもオブジェクト関数の中身は
実は凄く高度で
複雑なメカニズムだなぁ(´△`)

実は今回
俺が必要だった処理が
同義名からインスタンス生成された物体を
逆引きしてバージョン得て
インストされてる複数バージョンを
見つけてきて

それそれぞれのGUIDを得て
参照設定を
常に最新のものを選択するのか
他にバージョン違いの候補が
選択出来るのとして場合に
候補を選んで固定化する

更に候補が失効した場合には
使用不可の参照を解除して
他の候補へ参照設定し直す

そういうのは
実行時バインディング
一発なんだけれども

Excel VBAのメリットを活かして
配布してあげた先の人が誰でも
マクロ改造とかし易い様に
VBEのオートコンプリートが働く様に
静的バインディングにしておきたい

更には
素人の手を煩わさない新設設計で
どこのパソコンに出しても
未来に渡って予期せぬバージョンとか
そういうので絶対に
参照エラーの発生しない
そういうマクロにしたい

だから無くなる機能は使わない
バージョン違いが有るオブジェクトは
そのパソコン環境に自動で合わせる

そのパソコンの中の
最新バージョンのコンポーネント
最優先の候補にするけれども
ユーザーさんが環境設定を変えれば
バージョンを指定出来る

パソコンの環境によっては
コンポーネントが存在しなくて
エラーになる要素は

自動でエラーの無い古典的な手法で
処理を代行する(俺式ロジックで)

まぁ
とにかくどこでも動く
改変自由
ロジック転用自由
サポートフリー
ノークレーム、ノーリターンでリリース

それでちょっと
真剣にマクロ組んでた

俺の職業人としての
Excel VBAとかVBの本職の技術を
ぶっちゃけノウハウ全て晒してて
Excel VBAVBでは
こう作るととてもクオリティが保てる
しかも簡単になる
デバッグも簡単になる
どんなバージョンのパソコンでも
マクロが確実にエラー無くて動く
とても読み易い
業務や製品としてのマクロは
こう書くべき

フォローやサポートしなくても
配るだけで相手が必ず使える

そういう為の
俺の業務ノウハウの全てが詰まってる

でも
とあるコンポーネント
Windowsの中に
バージョン有り過ぎで
パソコン環境でバラバラ

俺も普通なら
実行時バインディングで済ますけど

今回は不慣れな素人でも
マクロを好きに改造出来る

そういう新設設計で
静的バインディングでの
バージョン違いのエラーを
どうしても解決して実現したい

更には将来のパソコンや
将来のバージョンのExcelでも動く
(VBAじゃ無くなれば無理だけど)
そうしたい

これにはとても深い理由が有って
大抵の場合
俺の書くExcelマクロはエラー無く
どこでのパソコンも動くのだけど

最近仕事上で見掛ける
同僚達や色々な下請会社さんの
Excelマクロが

アチコチのパソコンでエラー多発で
仕事に支障出ていて
みんなが困ってる

俺もイチイチ他人のエラー出てるの
直してやるのも毎度になると面倒になる

最近そういうので
職場の
Excelドキュメント類とか
定義自動生成マクロとか
ボロボロな成果物を使って仕事してる
そういうみんな見てて

プロな癖に何だかなぁと感じてるし
俺もその不出来なものを
共有ツールで有無も言わさずに渡されて
使わなきゃならない訳で

クオリティの低さに辟易してる(´△`)
本職ならもう少しプロなりの
マシなクオリティで
コーディング書こうよって思う

どこかクリックする度にイチイチ
あっけなく
エラーで止まるプログラミングとか
あまりにお粗末

しかもコーディングセンスも
素人並に酷いし…

仕事なら
仕事の最低限守るクオリティが有る

そういうコーディングの癖を普段から
しっかり意識に持って仕事してないと
いつまで経っても何年経っても
プログラミングレベルが変わらない
常に一仕事一仕事に対して
反省や考察しながら
どうしたらクオリティ上がるか
どうコーディングしてたなら
正解だったのか
他に方法が無かったのか
いつも真剣に考えながら仕事していかないと
絶対に成長しない

うちの職場には
致命的にそういう努力が欠けている

だから
辞める前に最後として1つだけ
手本に残して去ろうと思う

残る人達が
それで少しでも参考にしてくれて
クオリティあげてくれると
その人達の将来の為だと思う

そういう理由が有る

うちの職場は
モラハラ達の井の中の蛙
自己満足王国を実現する為の
モラハラ横行する鎖国状態な
閉鎖空間だけら

長年閉じ込められて
囲いこまれている
プロパーや下請さん達の
レベルとクオリティが
凄く下がってきててボロボロで
笑えない事態になってきてる

多分
もうすぐ何かしら大失敗を
連発する時期に入ると思う

俺が是正する為に
事業本部から技術応援と指導として
派遣されてきた20年前は
余りにレベルもクオリティも低くて
ボロボロな職場だった

それから一生懸命に頑張って
職場とみんなを良く変えたけれども

ナリを潜めて大人しくしていた
諸悪の根源だったモラハラ達が
息を吹き返して
恐怖支配を取り戻して
元のボロボロなレベルに戻った

俺は20年前に
お世話になってた幹部達からの勅命で
転勤してきてまで救いにきた

それでも手酷く最悪に裏切られた
だから
もう俺も面倒が見切れないし関わらない

最後に1つだけ残して行く
せめてこれくらいのクオリティは
仕事なら出せよ
そういうメッセージを込めて

だから真剣に全身全霊で
持ってるノウハウ出せるだけ詰めて作ってる
✧*。( ´∩•͈ω•͈∩` )✧*。

まぁ
みんなが潰されていくの
それを残して去るのは心配にも思うし
気掛かりで後髪引かれる

でもキッパリと
この職場と会社からは縁を切る

だから1つ何かくらいは残して行く
それで後はもう俺は知らない
✧*。( ´∩•͈ω•͈∩` )✧*。