全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1057
推到 Plurk!
推到 Facebook!

ReadBinaryData => Invalid data type

尚未結案
blk5743
高階會員


發表:34
回覆:371
積分:236
註冊:2003-11-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-22 16:31:47 IP:61.66.xxx.xxx 未訂閱
  
if ( Registry->OpenKeyReadOnly("SYSTEM\\MountedDevices") == true )
{              
    char BinData[1000],Device[15];        strcpy(Device,"\\DosDevices\\D:");
    unsigned short BinSize=Registry->GetDataSize(Device);
    for ( Label = 'D'; Label < 'O'; Label++ )
    {
        Device[12] = Label;
        ZeroMemory(BinData,sizeof(BinData));
        Registry->ReadBinaryData(Device,BinData,BinSize);  
    }
}
有時候會出現下圖 此裝置為光碟機,而且不是每次都會有問題 請問各位前輩有何看法
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-22 17:11:13 IP:220.130.xxx.xxx 未訂閱
 
if ( Registry->OpenKeyReadOnly("SYSTEM\\MountedDevices") == true )
{              
    char BinData[1000],Device[15];        strcpy(Device,"\\DosDevices\\D:");
    unsigned short BinSize=Registry->GetDataSize(Device);
    for ( Label = 'D'; Label < 'O'; Label   )
    {
        Device[12] = Label;
   ZeroMemory(&BinData,sizeof(BinData));
        Registry->ReadBinaryData(Device,&BinData,BinSize);          }
}
blk5743
高階會員


發表:34
回覆:371
積分:236
註冊:2003-11-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-22 17:33:48 IP:61.66.xxx.xxx 未訂閱
引言: ZeroMemory(&BinData,sizeof(BinData)); Registry->ReadBinaryData(Device,&BinData,BinSize);
這個方式還是不行
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-22 18:10:58 IP:220.130.xxx.xxx 未訂閱
Device[13] := '\0';<--NULL Terminated
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-12-22 18:11:44 IP:220.130.xxx.xxx 未訂閱
Device[14] := '\0';<--NULL Terminated
blk5743
高階會員


發表:34
回覆:371
積分:236
註冊:2003-11-17

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-12-22 18:39:34 IP:61.66.xxx.xxx 未訂閱
引言: Device[14] = '\0';<--NULL Terminated
這方式我之前也用過,但是也沒用
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-12-23 10:07:47 IP:220.130.xxx.xxx 未訂閱
    我實作了一下, 發現如果 BinSize 小於 儲存在Registry中的資料數
就會發生這個問題,但是程式碼中有去Call GetDataSize(),那麼有可
能是當BinSize = -1時造成的.並且
  BinSize=Registry->GetDataSize(Device);
應移到for loop 內應較為合理.    
    unsigned short BinSize;
    strcpy(Device,"\\DosDevices\\D:");
    Device[14]='\0';
    for ( Label = 'D'; Label < 'O'; Label   )
    {
      if((BinSize=Registry->GetDataSize(Device))>-1)
      {
        Device[12] = Label;
        ZeroMemory(&BinData,sizeof(BinData));
        Registry->ReadBinaryData(&Device,BinData,BinSize);  
      }
    }    
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-12-23 10:11:59 IP:220.130.xxx.xxx 未訂閱
更正!

    unsigned short BinSize;
    strcpy(Device,"\\DosDevices\\D:");
    Device[14]='\0';
    for ( Label = 'D'; Label < 'O'; Label   )
    {
      Device[12] = Label;
      ZeroMemory(&BinData,sizeof(BinData));
      if((BinSize=Registry->GetDataSize(Device))>-1)
        Registry->ReadBinaryData(&Device,BinData,BinSize);  
    }    
Sorry! 因手邊只有Delphi, 沒有BCB.
blk5743
高階會員


發表:34
回覆:371
積分:236
註冊:2003-11-17

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-12-23 11:55:53 IP:61.66.xxx.xxx 未訂閱
引言: BinSize=Registry->GetDataSize(Device); 應移到for loop 內應較為合理
果然是沒有考慮周詳
系統時間:2024-05-19 15:59:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!