More from: プログラム

今時VB6と格闘とわ・・・

仕事とは関係なくVB6のプログラムと格闘中orz
WindowsXP向けに特注で作られたソフトをWindows10で動作するかどうかの検証なんだけど、最初はMSCOMCT2.OCXが無くて動作しなかった。
これはVB6のSP6をダウンロードしてから解凍し、出て来たファイルを
C:\Windows\SysWOW64
にコピーし、コマンドプロンプトを管理者権限で起ち上げて
cd C:\Windows\SysWOW64
regsvr32 MSCOMCT2.OCX
を実行してレジストリに登録すればなんとかなった。
本来なら一緒に出てくる.infファイルを使ってインストールするんだけど、Windows10Pro64bit版ではインストール出来なかった。

問題はそこから先なんだけど、内部を解析しないとならないことになりそうなので気が重い・・・
モジュール数が多いので目的の処理がどこで行われているを探すだけで一苦労・・・
なんとかなるかなぁ?

←クリックしてくれると嬉しいです。

あれ?まだ直ってないのね。

先ほどNIFTY-Serveのサービスから三日ぶりにログアウトしたら、利用時間の表示がおかしいままだった。
証拠のスクリーンショット

NIFTY-Serveのログアウト直後の画面

NIFTY-Serveのログアウト直後の画面。利用時間の表示が変。

表示の中身を下に引用しておく。
引用開始———————————————————————————————-
ログアウト

     LOG IN    - – – 2012/06/14 21:49:47
     LOG OUT   - – – 2012/06/17 23:16:59

 ご利用時間は、73時間4334分12秒でした。
 ご利用誠にありがとうございました。

Clear PAD
Host requested clearing the call

HOST NAME?
*OFF

NO CARRIER


引用終了———————————————————————————————-

本当は3日と1時間27分12秒なので、73時間27分12秒となる筈なのだが・・・・・・
この表示を見ると時間の差と秒の差の表示は合っている。
で、分差の計算が間違っていて、どういう計算をしたらこの数字が出てくるのかを考えてみた。
単に73時間27分をそのまま分で表示しているのなら4407分となる筈。
で、その分の数字と実際に表示された数字の差が73なので、本来は4407/60(=73.45)の小数点部に60を掛けたのが分(この場合は27)の表示になるべきなのだが、何故か4407(分)-73(時間)を引いた数字を分の数字として表示しているようだ。
うーん、結構単純なバグだなぁこれは(笑)。
実際には秒差を求めてから時分秒の表示に直しているんだと思う(自分ならそうする)けど、そこで計算式を間違ったと思われる。
#整数計算なら
時間差=秒差/3600
分差=(秒差-時間差*3600)/60
秒差=秒差-時間差*3600-分差*60
で求められる。(筈、この式で合ってるよね?)

サービスを開始してから半月以上も経っているからとっくに気付いて直してあるかと思ったけど、もしかしたら気付いてさえいないのかな?
それとも昔のNIFTY-Serveの時も同じで、そのまま再現しているとか?
昔は時間で課金されていたから、今回のような長時間のログインはしていなかったけど、数時間程度なら入ったままのことはあった。
その時にはこんなことは無かった様に記憶しているけど、ちょっと不確かだなぁ。

さて、このバグはいつまでこのままなのだろうか?
#教えてやれって?そうかもしれない(笑)

←クリックしてくれると嬉しいです。

インターフェース

よそのSNSに日記を投稿していてふと思い出したが、昔はシリアルやパラレルを使っていたなぁ。
シリアルはモデム、パラレルはプリンタを主につないでいたっけ。
LANとブロードバンドの普及でモデムがほぼ不要となり、USBの台頭でプリンタもUSBを使うようになった。
結果シリアルもパラレルも最近のPCには見られなくなってきた。そもそもIntelがレガシーデバイスを排除しようとしてるしなぁ。
PS/2すら付いてないPCも多いしなぁ。
でも未だにシリアルインタフェースを必要とする外部機器もあるから、そういうものを使う時はPCを選ばなくてはならない。
先日も大型ディスプレイ用のタッチパネルを探していて、提案されたのがシリアル接続のもの。液晶で有名な某メーカーの製品だったが、耳を疑ってしまった。他メーカにはUSB接続のものもあるのにねぇ(笑)。

昔GPSユニットをつないだときもシリアルだったなぁ。通信速度が4800bpsと決められていたが、シリアルポートのドライバが9600以上にしか対応してない(というか9600以上にしか設定できない)ので、直接16550のレジスタをいじって4800以下に設定できるようにするサブルーチン書いたなぁ。
パラレルも外部端子を接続して使うのに、レジスタ読み込み用のドライバ書いたなぁ、、、

←クリックしてくれると嬉しいです。