MFCプログラム

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ざこ

MFCプログラム

#1

投稿記事 by ざこ » 16年前

void CDialogA::OnInitDialog()
{
  CString pname, key,name;
  int len;
  const int len_b1=255;
  const int len_b2=1000;
  CArray<int, int> num;
  int insrt=0;
  num.RemoveAll();
  
  key="●●●";
  HKEY hkey;
  if(::RegOpenKeyEx(HKEY_LOCAL_MACHINE, key ,0,KEY_READ | KEY_EXCUTE, &hkey)==ERROR_SUCCESS){
     char szBuffer1[len_b1],szBuffer2[len_b2];
     DWORD dwBufferSize1=len_b1;
     DWORD dwBufferSize2=len_b2;
     DWORD dwSubkey=0;
     DWORD dwType=REG_SZ;

     while(::RegEnumValue(hkey,dwSubKey++, szBuffer1, &dwBufferSize1,NULL,&dwType,(LPBYTE)szBuffer2,
&dwBufferSize2)==ERROR_SUCCESS){

        IsAdd=TRUE;
        name=szBuffer1;
        name=name.Right(name.GetLength()-7);
        int no=atoi(name);

        for(int i=0; i<num.GetSize(); i++){
            if(num<no)
               continue;
            else if(num>no){
               IsAdd=FALSE;
               insrt=i;
               num.InsertAt(i,no);
               break;
           }
        }

        (以下略)

}


少し長いので聞きたい所だけ取り出しました。このプログラムはレジストリからキーを取得し、エントリを列挙する。
szBuffer1にはレジストリのエントリ名が格納されるバッファ
szBuffer2にはレジストリエントリのデータが格納されるバッファ だとは思うんですがその後がよくわかりません。

>>name=name.Right(name.GetLength()-7); で
レジストリのエントリ名はPositionでデータにはダイアログのサイズが入ってました。

名前 種類 データ
Position   REG_SZ  100,100,100,100     など

swBuffer1には定数文字列への32ビットポインタのLPTSTR型ですよね。
長さ-7とかいうのがさっぱり意味わかりません。

バグ

Re:MFCプログラム

#2

投稿記事 by バグ » 16年前

nameには、szBuffer1の最初の7文字をカットしたものが代入されているようです。
どうして、そのような処理をしているのかは分かりかねますので、ブレイクポイントを設定して、szBuffer1の中身を確認してみてください。それで疑問は解決できそうに思います。

ざこ

Re:MFCプログラム

#3

投稿記事 by ざこ » 16年前

中身確認をすっかり忘れていました。ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る