-------------------------------------------------
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の
方となる。
標準テンプレートはiostreamをインクルードしなければコンパイルエラーが出る
gl->Light[0]->Enabled = true; //としなければ何も見えない。
動的にメモリ配列を確保するときには、配列の数をよく確認すること。
ひとつでもたりないとメモリリンクを切断してしまうので、2回目の確保や
その他のメモリの回復がうまくいかないことがある。CPU窓で1度目と2度目
のスタックを確認してみるとよくわかる。
OSA.EXE(MS OFFICE)があると駄目なときがあるのでスタートアップからはずしたら動いた。
BuildCommDCB(lpszDef, lpdcb)
これは規定文字列に関する内容のみをDCBに設定する
したがって
SetCommState(hCommDev, lpdcb)
の前にすべてのDCBを再設定するか、適当に初期化した後に
BuildCommDCB(lpszDef, lpdcb)
を呼び出したほうがよろしい。
すべてのVCLライブラリは __fastcall 修飾詞を使うこと
C:\dokoka>attrib -r /s
COMAGENTのプロパティを設定すること
コントロールパネルから削除して、再インストールしたら直った
97/12始めの配布バージョンには構造的なバグがあり,多重にテンプレートを重ねたものは
コンパイルエラーが出る.
97/12/8 Win32の新しい関数StretchBlt,StretchDIBBltでプリンタデバイスコンテキスト
に印刷すると不可解な現象が起き,印刷されないことがある.
97/12/8 RAS接続してMAILSLOTによるデータ交換をしていると,ちゃんとWriteFileの
ステータスを確認して送信しているつもりでも,前回から5秒以内に送信したものはすべて
どこかへ失われてしまうことがあった.
サーバー側にはLANカードが装備されており,ドライバも組み込まれていた.しかし
LAN(10BaseT)は接続していないのでMACレベルでは接続が確立していない状態であった.
そこで送信データの配布先を探索しようとしてRASサーバー側ですべての資源について
毎回可否を問い合わせ,その中でメイルスロットの内容を喪失しているように見える.
対策としてケーブルによるLANを確立させるか,カードを組み込まないかの2つの方法ある.
MACの問題とも思えるが,単純に10Base2なら終端抵抗,10BaseTならハブをつないだだけ
では解決しない.MACがケーブルを見ているのでMACに対して何がしかの局名を提示しなく
ては,その上部構造を安定化しないように見える.
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)
で受信できる
サーバが単独に一台,ただしLANカードとドライバ組み込まれていて使用されていない状態でRASのダイアルアップサーバを組み込んである.
この時,外部からダイアルアップ接続をしてエクスプローラで見ても,サーバ側ではファイル共有サービスがアクティブになっていないので,接続だけが存在する状態になる.
この状態は,MODEMの接続,ソケットレベル以下の接続が完成している状態である.クライアント側からファイルを見るためにはNETコマンドでドライブの割り当てをする.
char a[128],b[128]
などの定義で,このとおりに配列が確保されている保証はない.bに200文字の書き込みをおこなうと,aのデータが無くなってしまったりする場合がある.
新しくドライバをインストールするときにDMAモードとポーリングモードがあるのを発見,普通はDMAモードらしいのだが,ポーリングモードを使うと遅いけれどデータエラーは解消した.
モデムのプロパティで、設定、接続、接続時のタイムアウトがゼロになっていた
原因は不明だがVCLを何度も構築試験しているうちにライブラリがこけていたのか
再インストールしたらとりあえずなおった。
ノイズ対策用としてOPアンプの出力に直接コンデンサをつけると発振の可能性が高
いことに気がつかなかった。
マクロを使って、記載されていたマクロを通過する時間を、反応が起こる時間として誤解
していた。内部に判定があって処理をするマクロは判定後の処理にいたる時間が内容によって異なる。
たとえ全体の時間が常に同じであっても、微細なタイミングは違ってくる。
単線を使うべきではない、折れてしまう。撚り線を使う
WIN16ではインスタンスを調査して多重起動を知るがWIN32では、常に最初のインスタンス
をレポートしてくる。したがって同じプログラムが起動しているかいなかという問題はプログラム
のメインウィンドウに名前をつけて起動する。2回目ならば同じ名のプログラムがすでに存在し
ているかどうかを調査することで対処できる。Win32のFindWindow関数
またWin32にあるMutex,セマフォなどの共有資源で排他制御をしてもいいだろう.
いくつかの手法があり、コントロール/ネットワークでwindowsにログインにチェック
新しい名前でログインしパスワードを改行だけで入り込む
パスワードの設定で画面設定を全部共通使用にする
このどれか、または全部で起動時に何も聞いてこない状態になり、電源断からスタートアップ
で指定されたプログラムが自動起動するようになる。
ATDT の後に BLACKLISTED と返答が来る? 原因不明、LWP144の電源をPCの
後ろからAC100のコンセントに戻したら、とりあえず動作。
WIN95\SYSTEM\COMAGENT.EXE のプロパティでメモリ設定をすべて自動にする
OWLライブラリをランタイムで使用するか、FIXで使うかと
クラスポインタを32bitで扱うかの関係が影響している
IDEからはNTからはTDWINが起動しないとメッセージが出る。
いったん終了しデバッグDIRの中の*.TD?を全部削除し、BC45から直接にDOS版の
TDを動かすと復旧する。
プリントアボートダイアログ作成の失敗はリソースを読み込んでいない
IDEでprint.rcを指定すること
このメッセージが出る場合、メモリーが足りない場合、BWCCを使うソフトで
EnableBWCC(TRUE);
を宣言していない場合などがある。
データーは読んでくるが特にエラーも無いはずなのにデータが違っている。
これはMSCDEX.EXEが腐っていることがあるとJO1EOXに言われた、たしかにその通りだった。
このファイルは読みだしオンリーにしておくとよい。
CDドライブのDOSドライバをインストールした後にSMARTDRVを組み込むとエラーが起きる。
DOSのCRCエラーは発生しないが読み取ったデータがおかしい。
CDROMのMSCDEXはredirとserverの間に入れること、入れないと読みだしエラーを起こす
オプション、環境、エディタ、表示、からプリンタアイコンのフォントを選択すれば指示できる。
それ以外のフォントでは不定のフォントが使われる
スタートアップに登録してアイコンで実行なら問題ない。
タイミングの問題に見える
LANTASTIC JPRINTER.SYS があるとページプリンタのビットマップ印刷がおかしい
これはバージョンに敏感で、ボーランド系の少し前のものをインストールしたときには古くなっ
てしまうことがある
PC98用のIDEドライブを中古で購入してきてPCATに入れたらFDISKをやろうが
何をしようがCドライブとして起動しなかった。初期判のPC98のIDEの初期フォーマットが
IBMのパーティション定義と異なるためらしい。
ROMBIOSからハードウェアフォーマットをやり直したら動作するようになった。
inputdia.hのなかで)が必要とわめかれたら以下のように、最初にインクルードしてみたら直った。
#include <owl\owlpch.h>
#include <owl\applicat.h>
#include <owl\inputdia.h>
長さの指示は最後のゼロを含むターゲットサイズを指示すること。
char buf[8];
PTEdit->GetText(buf, 8);
頭から7文字ないしは8文字分がコピーされる、最後のゼロが入るかどうかはリソースの状態による
frame = new TDecoratedFrame(0, title, new MPWin(title), TRUE);
これの4つ目の引数がTRUEにしておくこと、これでメインウィンドウがマウスイベントを引き渡すことができる
IDOK を持つプッシュボタンを定義して、それを見えなくしておくと良い。
そのためには
EV_COMMAND(IDOK, CmOk), のイベント設定と
void CmOk(void); 関数のオーバーロード、
さらにはリソースでボタンを設定しなければならない
まず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の状態ならソースコードの関数まで出てくるので対処ができる。
*.IDE,*.DSWを復旧させ、BC4のBINディレクトリのBCCONFIG.BCWを保存しておいた物で更新する
BCCONFIG.BCE は BC4\BIN\BAK
*.IDE & *.DSW は必ずFDにバックアップしておくこと
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 abc {
enum EM { a,b,c };
func(void);
}; ならば
abc:EM abc::func(void){...} として列挙型の指定の前にクラス名の特定が必要。
関数宣言の場所のスコープがグローバルでクラス内のスコープの中に入っていない
のでつけなければならない。関数の中に入ってしまえばいらない。
OWL 呼ばれたコマンド自体でコマンドのチェック状態を変える場合にはイベントとして
EV_COMMAND_ENABLE(CM_ID, func), でエントリーする。
func(TCommandEnable TCE){ TCE.SetCheck(1); } でON。このコマンドはエントリー順に呼ばれるのかな?
case 文で
switch(c)
case: sjdfhskjfh(); break; とするとbreakを見落とすことが多い
case: func();
break; と決まった位置に書くようにしよう
case:....
enum A { a,b,c }
として宣言してあると、 A(b) は1になる、あたかも関数の帰り引数のように使える。
日本語文字列扱いやCHARの宣言で大小判定するときに0x80以上は負になるので
うまくいかないことが多い。
したがってコンパイラの設定でCHARは一般的に符号無しに指定する。
オプション、プロジェクト、コンパイラ、コード生成、符号無しキャラクタ
複数ステータスのフラグを持つときはint型ではなくenum型で宣言して使用し、
引数宣言にはenumの形式で宣言すれば型一致が検査されるのでトラブルが少ない。
ダイナミックに生成し削除されるクラスへのポインタを参照する構造を持つ場合には
必ず、死んでいるときには、そのポインタを自分で0にしておき、使用するときには
有効検査をしなければならない。