-------------------------------------------------
2007/1/11
DOS版のPSE.EXE HP200LXでテンポラリ・ファイルが開けないと言ってくる

\PSE\PSERC のtemp=c:を追加するか set temp=c:
で動作する C:\ではNG
-------------------------------------------------
2002/12/31
TrueType Font Win98 最大化 最小化 窓の右上記号などの文字化け
対策→ http://homepage2.nifty.com/02010/main.htm

Win98で文字が化けたら

フォントキャッシュを再構築する。
 True Type Fontは使うたびに肥大化して起動時間がかかるようになる。
破損すると文字化けする。
 これをふせぐためにはC:\Windows\ttfCacheを一旦削除して再起動し、
 readonlyに書き換える。ttfCacheはフォルダオプションですべてのファイルを
 表示にしておくと見られる。1.5MB以上あったら要注意。
-------------------------------------------------
2002/07/06
BCB++5
FormCreateとデフォルトコンストラクタの関係
Formは派生して構築される。そのなかでFormCreateはオーバライトされている。
したがって派生されたもののコンストラクタはFormCreateの後に呼び出される。
またどじってしまった。
-------------------------------------------------
Libretto PAL2060TNML プラネックスコミニュケーションのURS-02 USBーRS232 シリアルインターフェース MAPFAN5 LOOTEXPLOLER COM1がCOM0に見えてしまう

レジストリの
HKEY_CURRENT_USER/Software/Increment P Communication/MapFan/5.0/RtExploler/GPS

ComPort を1に指定したら動いた
-------------------------------------------------
Excel97 Word97
autoexecNew、DistMon、のエラーが出る
アクロバットの自動実行VBファイルがおかしいのでアクロバットを再インストールする

-------------------------------------------------
2001/4/12
MathCAD8professional の再インストール
どうしてもうまくインストールできないのでregeditにてmathcadの名があるものをすべて削除しmathcad8aにインストールしたらうまく動いた
-------------------------------------------------
バグはなぜ生まれるか?
ポカミス→ポカミスを許さない手法
仕様不良→仕様不良があれば組たたらないようにする手法とか
いずれにしろ、「注意で防ぐ」方法では無理だ
--------------------------------------------------------------------------------------------------
Timage Picture:Graphic の bitmap
画像オブジェクトの Graphic プロパティに新しいビットマップを代入すると,
画像オブジェクトは既存のビットマップを破棄し,新しいビットマップのオーナーになります。それまでのビットマップが使用していたリソースの解放に関する細かな処理は,VCL が自動的に実行します。(by HELP)
-------------------------------------------------
BCB5 Image1とBMPの関係
Graphics::TBitmap *bmp;
func{
bmp->Canvas に絵を描いて 
Image1->Picture->Bitmap = bmp;
 としても絵が出る

Image1->Picture->Bitmap = bmp; の後に
Image1->Canvas に絵を描いても絵が出る、このときImage1のCanvasはbmpを指示している、bmp以外では駄目。
-------------------------------------------------
Win98の右上×点、その他システムが扱うフォントが異常 ×がρになった
悩んだ挙句、起動時にF8を押してセーフモードで一度立ち上げたら
元に戻った。

俺だけなのかな? これで2度目だ。この前は全部インストールしなおしたのだ
-------------------------------------------------
STL mapへのアイテレータが行方不明になる
ある関数でアイテレータを作り作業をする。内部で別の関数を呼び出し挿入や削除をおこなうと当然のごとくアイテレータが無効になる。
-------------------------------------------------
不可解な浮動小数点エラー
以下のような形で返り引数を未定のまま放置しておくとコンパイラは「値を返さなければいけない」という、これを放置しておくとメモリの中身がそのまま浮動小数点として返ってしまい、運が悪いと浮動小数点エラーとなる。ちゃんと何かを返し、警告はすべて対処しておくのがいいということだ。

double PosEnv::GetMinRRK(vector<int> &p1)
{
if(p1.size()<3) return 0.0;
// return 0;
}
-------------------------------------------------
テンプレート引数としてのテンプレート
template <class U, template<class> class T> U abs(T<U> &v) { return v.abs(); }
テンプレート引数として使えるのはクラステンプレートだけである。
  The C++ Programing Language 3rdEdition C.13.3
-------------------------------------------------
LotusWordPro2000 数式エディタが起動しない
別マシンのCD−ROMをD:などのドライブに割り当ててインストールするとうまくいかないようだ。
-------------------------------------------------
delete 演算子
は0またはnew演算子によるポインタに対して実行できる
-------------------------------------------------
BCBで変数や関数の計算結果を見ることができるが
そのときに「副作用を許す?」というチェックボックスがある
うかつにこれを外すと、特に数値計算の場合にはコプロセッサ
の状態を崩してしまうことがある。

デバッグ中にトレースポイントの与え方で状態が変わるときには
気をつけること。
-------------------------------------------------
BCBプラグラムのバージョンアップ
以前のソースコードをBCB5へ変換しようとするときはコンストラクタの中身をほとんどCreateイベントに移動させなくてはいけない。特に二つのformがあるときは初期化の順序性を維持するために必要である。 2000/8/16
-------------------------------------------------
ワードプロの起動が非常に遅い
デフォルトのプリンタとしてACOROBATのPDF出力を指示してあるとDLLのロードなどで非常に遅くなる。
-------------------------------------------------
IE4,5 の保護違反
CROSSLOAD3をインストールするとMS配布版のバグありiehelper.dllがいっしょに組み込まれる、これを変更すると直る。 2000/02/12
-------------------------------------------------
ファイルネームの分解と合成
_splitpath, _wsplitpath stdlib.h
-------------------------------------------------
Win98 インストール時のトラブル
K6-3 400 前橋のマシン
HDD MAXTOR 91728D8 16Gbyte
SCSI SYM53C810 ID=7
MO MCE3064SS ID=0
Audoi P5A付属 ESS solo PCI Audio
LAN DEC21140A Longine LCS

オーディオはボード付属のCD−ROMからインストール

LANカードのトラブル
現象:うまくインストールできない、電源の自動遮断が動かなくなる
対策:PCIスロットの5番目から1番目に変更したら直った
これのインストール中に、CD−ROMからブート状態にしていたときはD:ドライブ、途中でMOが割り込んでくるのでE:になっているのに気がつかずファイルが無いというエラーメッセージが頻発

AGPのインストール
付属CDからWin98ドライバのみをインストール
MF8617(CRT)、大きいフォント、1280×1024 にした

-------------------------------------------------
コピーコンストラクタが存在しないといわれるときがある。
class NCM {
....
}

内部で
NCM(NCM & P) {...}
として定義していると、一般的に使われるコピーコンストラクタ形式
NCM(const NCM & P) {...}
を隠してしまう(なぜならばコンパイル時の引数タイプがほとんど同じだから)
そこでコピーコンストラクタが無いエラーが発生する。
-------------------------------------------------
クラスライブラリ中の関数、関数テンプレート
 クラスライブラリ中の関数は当然ながらそのクラスの名があってこそ使用できる。関数テンプレートのように使いたいばあいにはクラス定義の外側で宣言しなくてはいけない。

template <class T> V2 {
T abs(Vec2<T> &v) { return sqrt(v.x*v.x + v.y*v.y); }
}
では、このabsは以下のようにしか使えない
V2 v2a, v2b;
A = v2a.abs(v2b);

外部に
template <class T> T abs(Vec2<T> &v) { return sqrt(v.x*v.x + v.y*v.y); };
と書いておけば
A = abs(v2b);
と使える。
-------------------------------------------------
Linux パスワードの変更
rootで
passwd UserName
とすると新しいパスワードを定義できる
-------------------------------------------------
PIC16F84 終わったはずの割り込みトリガが入ってくる
 RS232Cで10文字ほど取り込むプログラム、1200ボー、CPUクロックは32kHZ
非常に低速動作なので、割り込みの合間に少しづつメインプログラムは動作する。最初のデータがエラーなので、それを検出するとエラーコードを返す。
 3文字進むぐらいにメインプログラムがエラーを検出する。
 エラーコードの送信が終わるまで割り込みマスクを不許可にしているがハードウェア的に内部にラッチしているフラグ情報はそのままにしておいた。
 そのためにすべてが終わったとして割り込みマスクを解除すると、ラッチされていた要因で割り込みが再度かかってくる。これは途中で長時間待たせても変わりがない。だってそうだ、すでにフラグに情報が記憶されているのだから、それをリセットしてからマスクを解除するのが当然。

-------------------------------------------------
BCB4
 Form1のコンストラクタに書かれているものより,OnCreateの方が先に実行される。
なぜならば、継承もとのFormのコンストラクタの初期化が済んだら,即座にOnCreate
が呼ばれ、それから継承先のコンストラクタが実行される。
 したがって、ユーザー側から見て,最初に呼び出され実行されるものはOnCreateの
方となる。

stl (BC++3)

標準テンプレートはiostreamをインクルードしなければコンパイルエラーが出る

opengl (BC++3, Class OpenGL)

gl->Light[0]->Enabled = true; //としなければ何も見えない。

new,delete(BC++3)

動的にメモリ配列を確保するときには、配列の数をよく確認すること。
ひとつでもたりないとメモリリンクを切断してしまうので、2回目の確保や
その他のメモリの回復がうまくいかないことがある。CPU窓で1度目と2度目
のスタックを確認してみるとよくわかる。

COMポートの初期化ができない (BC++3)

OSA.EXE(MS OFFICE)があると駄目なときがあるのでスタートアップからはずしたら動いた。

COMポートの通信においてNULが届かない!(BC++3,etc)

BuildCommDCB(lpszDef, lpdcb)
これは規定文字列に関する内容のみをDCBに設定する
したがって
SetCommState(hCommDev, lpdcb)
の前にすべてのDCBを再設定するか、適当に初期化した後に
BuildCommDCB(lpszDef, lpdcb)
を呼び出したほうがよろしい。

VCL(BC++3)

すべてのVCLライブラリは __fastcall 修飾詞を使うこと

読取専用の一括解除

C:\dokoka>attrib -r /s

PC98 Win32 DOS窓の最終状態でちゃんと終了しない

COMAGENTのプロパティを設定すること

Exploer 自動接続できない

コントロールパネルから削除して、再インストールしたら直った

BC5.02テンプレート

 97/12始めの配布バージョンには構造的なバグがあり,多重にテンプレートを重ねたものは
コンパイルエラーが出る.

Win95 LBP(CANON)のレーザープリンタ

97/12/8  Win32の新しい関数StretchBlt,StretchDIBBltでプリンタデバイスコンテキスト
に印刷すると不可解な現象が起き,印刷されないことがある.

Win95 RAS接続のLANスピードが極端に遅い

97/12/8  RAS接続してMAILSLOTによるデータ交換をしていると,ちゃんとWriteFileの
ステータスを確認して送信しているつもりでも,前回から5秒以内に送信したものはすべて
どこかへ失われてしまうことがあった.
 サーバー側にはLANカードが装備されており,ドライバも組み込まれていた.しかし
LAN(10BaseT)は接続していないのでMACレベルでは接続が確立していない状態であった.
 そこで送信データの配布先を探索しようとしてRASサーバー側ですべての資源について
毎回可否を問い合わせ,その中でメイルスロットの内容を喪失しているように見える.
 対策としてケーブルによるLANを確立させるか,カードを組み込まないかの2つの方法ある.
 MACの問題とも思えるが,単純に10Base2なら終端抵抗,10BaseTならハブをつないだだけ
では解決しない.MACがケーブルを見ているのでMACに対して何がしかの局名を提示しなく
ては,その上部構造を安定化しないように見える.

Win95 タスクバーのインジケータ

97/12/1
 ここにICONを登録するのは
//アイコンをタスクバーのステータスエリアに登録
nid.cbSize = sizeof(nid);
nid.hWnd = Handle; //Application->Handle;
nid.uID = 1; //IconID
nid.uFlags = NIF_TIP | NIF_ICON | NIF_MESSAGE;
nid.uCallbackMessage = WM_Indicator; //USER DEFINE
nid.hIcon = Application->Icon->Handle;
strcpy(nid.szTip,"ComServer");
Shell_NotifyIcon(NIM_ADD, &nid);

プログラム終了時には
Shell_NotifyIcon(NIM_DELETE, &nid);
で削除

 イベントはWM_USERでかってに割り付ける
イベントの受信は Cビルダでは
void __fastcall indicator(TMessage &);

#define WM_Indicator WM_USER+131
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_Indicator, TMessage, indicator)
END_MESSAGE_MAP(TForm)

で受信できる

Win95 RAS

 サーバが単独に一台,ただしLANカードとドライバ組み込まれていて使用されていない状態でRASのダイアルアップサーバを組み込んである.
 この時,外部からダイアルアップ接続をしてエクスプローラで見ても,サーバ側ではファイル共有サービスがアクティブになっていないので,接続だけが存在する状態になる.
 この状態は,MODEMの接続,ソケットレベル以下の接続が完成している状態である.クライアント側からファイルを見るためにはNETコマンドでドライブの割り当てをする.

隣接配列の配置 Win3.1

char a[128],b[128]
などの定義で,このとおりに配列が確保されている保証はない.bに200文字の書き込みをおこなうと,aのデータが無くなってしまったりする場合がある.

486DX2 の CD-DRIVE データエラー

 新しくドライバをインストールするときにDMAモードとポーリングモードがあるのを発見,普通はDMAモードらしいのだが,ポーリングモードを使うと遅いけれどデータエラーは解消した.

ダイアルアップ、メイルですぐにモデムが切れてしまう

モデムのプロパティで、設定、接続、接続時のタイムアウトがゼロになっていた

Cビルダの終了時に保護違反の書き込みがおきる現象(CB++1)

 原因は不明だがVCLを何度も構築試験しているうちにライブラリがこけていたのか
再インストールしたらとりあえずなおった。

OPアンプの発振

 ノイズ対策用としてOPアンプの出力に直接コンデンサをつけると発振の可能性が高
いことに気がつかなかった。

PIC16F84 タイミング異常

 マクロを使って、記載されていたマクロを通過する時間を、反応が起こる時間として誤解
していた。内部に判定があって処理をするマクロは判定後の処理にいたる時間が内容によって異なる。
 たとえ全体の時間が常に同じであっても、微細なタイミングは違ってくる。

基板の外への配線

 単線を使うべきではない、折れてしまう。撚り線を使う

プログラムの多重起動の問題

WIN16ではインスタンスを調査して多重起動を知るがWIN32では、常に最初のインスタンス
をレポートしてくる。したがって同じプログラムが起動しているかいなかという問題はプログラム
のメインウィンドウに名前をつけて起動する。2回目ならば同じ名のプログラムがすでに存在し
ているかどうかを調査することで対処できる。Win32のFindWindow関数
 またWin32にあるMutex,セマフォなどの共有資源で排他制御をしてもいいだろう.

WIN95最初のパスワード要求のキャンセル

いくつかの手法があり、コントロール/ネットワークでwindowsにログインにチェック
新しい名前でログインしパスワードを改行だけで入り込む
パスワードの設定で画面設定を全部共通使用にする
 このどれか、または全部で起動時に何も聞いてこない状態になり、電源断からスタートアップ
で指定されたプログラムが自動起動するようになる。

Win95 モデムの不調

ATDT の後に BLACKLISTED と返答が来る? 原因不明、LWP144の電源をPCの
後ろからAC100のコンセントに戻したら、とりあえず動作。

BC5 TLINK でメモリが足りないとわめかれる

WIN95\SYSTEM\COMAGENT.EXE のプロパティでメモリ設定をすべて自動にする

nearの基本クラスからhugeを派生させようとしているというメッセージ(BC4)

OWLライブラリをランタイムで使用するか、FIXで使うかと
クラスポインタを32bitで扱うかの関係が影響している

TD DOS が起動しない

 IDEからはNTからはTDWINが起動しないとメッセージが出る。
いったん終了しデバッグDIRの中の*.TD?を全部削除し、BC45から直接にDOS版の
TDを動かすと復旧する。

OWL2 TPrintout(BC4)

プリントアボートダイアログ作成の失敗はリソースを読み込んでいない
IDEでprint.rcを指定すること

ウィンドウの作成に失敗しました(BC4)

 このメッセージが出る場合、メモリーが足りない場合、BWCCを使うソフトで
EnableBWCC(TRUE);
を宣言していない場合などがある。

CDドライブの読み取り不良(Win3.1)

データーは読んでくるが特にエラーも無いはずなのにデータが違っている。
これはMSCDEX.EXEが腐っていることがあるとJO1EOXに言われた、たしかにその通りだった。
このファイルは読みだしオンリーにしておくとよい。

CDドライブのDOSドライバをインストールした後にSMARTDRVを組み込むとエラーが起きる。
DOSのCRCエラーは発生しないが読み取ったデータがおかしい。

CDROMのMSCDEXはredirとserverの間に入れること、入れないと読みだしエラーを起こす

BC3++の印刷フォント

オプション、環境、エディタ、表示、からプリンタアイコンのフォントを選択すれば指示できる。
それ以外のフォントでは不定のフォントが使われる

WNET.EXE WIN.INI のLOAD で起動すると除算エラーになる LANTASTIC(DOS/V)

スタートアップに登録してアイコンで実行なら問題ない。
タイミングの問題に見える

LANTASTIC JPRINTER.SYS があるとページプリンタのビットマップ印刷がおかしい

AMIPRO 65000色のBMPを切り張りしても印刷できない。

BWCC.DLL Win3.1

 これはバージョンに敏感で、ボーランド系の少し前のものをインストールしたときには古くなっ
てしまうことがある

HDDが起動しない(古いIDE)

PC98用のIDEドライブを中古で購入してきてPCATに入れたらFDISKをやろうが
何をしようがCドライブとして起動しなかった。初期判のPC98のIDEの初期フォーマットが
IBMのパーティション定義と異なるためらしい。
ROMBIOSからハードウェアフォーマットをやり直したら動作するようになった。

OWL でインプットダイアログを使う場合インクルードの順に敏感である(BC3&4)

inputdia.hのなかで)が必要とわめかれたら以下のように、最初にインクルードしてみたら直った。

#include <owl\owlpch.h>
#include <owl\applicat.h>
#include <owl\inputdia.h>

Staticの関数でエディットバッフアの文字列を取得するとき OWL BC3&4

長さの指示は最後のゼロを含むターゲットサイズを指示すること。
char buf[8];
PTEdit->GetText(buf, 8);
頭から7文字ないしは8文字分がコピーされる、最後のゼロが入るかどうかはリソースの状態による

OWL ガジェットボタンで一行メッセージを下部に出すためには

frame = new TDecoratedFrame(0, title, new MPWin(title), TRUE);
これの4つ目の引数がTRUEにしておくこと、これでメインウィンドウがマウスイベントを引き渡すことができる

OWL ダイアログなどのエディットコントロールの文字を入れた後でデフォルトの改行動作を起こさせたくないとき

IDOK を持つプッシュボタンを定義して、それを見えなくしておくと良い。
そのためには
EV_COMMAND(IDOK, CmOk), のイベント設定と
void CmOk(void); 関数のオーバーロード、
さらにはリソースでボタンを設定しなければならない

保護違反が出る場合の対応 BC3,4

 まずWINSPCTRを常駐させておくべきである。さらにMAP,SYMファイルを作っておけば完全。
保護違反が出るとWINSPCTRの設定により指示した場所にWINSPCTR.LOG&BINが作られる。
後にDOS窓から DFA WINSPCTR.LOG とタイプインすると WINSPCTR.OUT が作られ、それは
==========
0 CBBS User::ArrivedClear(char far*,char far*) +0068
CS:IP 0008:1802 (3D2F:1802) SS:BP 3D57:5722
E:\SRC\CBBS\CBBS.EXE
==========
の形式で整理される。デバッグSWがONの状態ならソースコードの関数まで出てくるので対処ができる。

BC4の動作がおかしい場合

*.IDE,*.DSWを復旧させ、BC4のBINディレクトリのBCCONFIG.BCWを保存しておいた物で更新する
BCCONFIG.BCE は BC4\BIN\BAK
*.IDE & *.DSW は必ずFDにバックアップしておくこと

BC4バグ

class ToFile : public RoomBase, public RoomWork, public TDialog
と宣言した場合と
class ToFile : public TDialog, public RoomBase, public RoomWork
とでToFileから見たRoomBaseの文字列へのアドレスが2バイト違う?
上の方が正常
仮想基本クラスへのポインタがC++オプションでnearとthisサイズと同じのどちらかに設定できるが、このせいなのかもしれない。BCの統合環境デバッガのバグであると確認

classの中で宣言されたenumを帰り引数として使う関数

classの中で宣言されたenumを帰り引数として使う関数は
class abc {
 enum EM { a,b,c };
 func(void);
}; ならば
abc:EM abc::func(void){...} として列挙型の指定の前にクラス名の特定が必要。
関数宣言の場所のスコープがグローバルでクラス内のスコープの中に入っていない
のでつけなければならない。関数の中に入ってしまえばいらない。

OWL 呼ばれたコマンド自体でコマンドのチェック状態を変える

OWL 呼ばれたコマンド自体でコマンドのチェック状態を変える場合にはイベントとして
EV_COMMAND_ENABLE(CM_ID, func), でエントリーする。
func(TCommandEnable TCE){ TCE.SetCheck(1); } でON。このコマンドはエントリー順に呼ばれるのかな?

case 文の書きかた

case 文で
switch(c)
case: sjdfhskjfh(); break; とするとbreakを見落とすことが多い
case: func();
break; と決まった位置に書くようにしよう
case:....

enum の見え方

enum A { a,b,c }
として宣言してあると、 A(b) は1になる、あたかも関数の帰り引数のように使える。

日本語(C++、C)

日本語文字列扱いやCHARの宣言で大小判定するときに0x80以上は負になるので
うまくいかないことが多い。
したがってコンパイラの設定でCHARは一般的に符号無しに指定する。
オプション、プロジェクト、コンパイラ、コード生成、符号無しキャラクタ

enumの使い方

複数ステータスのフラグを持つときはint型ではなくenum型で宣言して使用し、
引数宣言にはenumの形式で宣言すれば型一致が検査されるのでトラブルが少ない。

new,delete

ダイナミックに生成し削除されるクラスへのポインタを参照する構造を持つ場合には
必ず、死んでいるときには、そのポインタを自分で0にしておき、使用するときには
有効検査をしなければならない。