線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2440
推到 Plurk!
推到 Facebook!

關於"return S_OK" ???

答題得分者是:RaynorPao
nlj859
資深會員


發表:139
回覆:375
積分:322
註冊:2004-03-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-06-24 12:08:10 IP:163.28.xxx.xxx 未訂閱
請問下段程式碼,最後有一個return S_OK,這代表它會回傳什麼? 通常不是都要有宣告好的變數嗎? S_OK是代表什麼意思? 謝謝.     
 
STDMETHODIMP TURLCoderImpl::Decode(LPSTR inStr, LPSTR* outStr)
{
 TNMURL *url = new TNMURL(NULL);      try
  {
    AnsiString msg;        msg = Now().DateTimeString()   " : ";
    msg  = "A COM Client Connect, and decode the string \"";
    msg  = inStr;
    msg  = "\"";
    Form1->Memo1->Lines->Add(msg);        url->InputString = inStr;
    *outStr = url->Decode.c_str();
  }
  catch (Exception &e)
  {
    return Error(e.Message.c_str(), IID_IURLCoder);
  }      return S_OK;
}
發表人 - nlj859 於 2004/06/24 12:10:22
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-06-24 14:03:40 IP:203.73.xxx.xxx 未訂閱
引言: 請問下段程式碼,最後有一個return S_OK,這代表它會回傳什麼? 通常不是都要有宣告好的變數嗎? S_OK是代表什麼意思? 謝謝.
 
STDMETHODIMP TURLCoderImpl::Decode(LPSTR inStr, LPSTR* outStr)
{
 TNMURL *url = new TNMURL(NULL);      try
  {
    AnsiString msg;        msg = Now().DateTimeString() + " : ";
    msg += "A COM Client Connect, and decode the string \"";
    msg += inStr;
    msg += "\"";
    Form1->Memo1->Lines->Add(msg);        url->InputString = inStr;
    *outStr = url->Decode.c_str();
  }
  catch (Exception &e)
  {
    return Error(e.Message.c_str(), IID_IURLCoder);
  }      return S_OK;
}
nlj859 你好:
(1)其實 S_OK 的值就是 0,所以你這樣子寫也是同樣的意思
   return 0;
(2)那為什麼要寫 S_OK?答案很簡單,只是為了增加程式碼的可讀性
(3)還有一個常用的傳回值 S_FALSE,它的值就是 1
(4)S_OK 通常用來代表這個 function 執行完全正確,S_FALSE 則否
(5)可是只有兩個傳回值通常無法表示所有的錯誤情況,因此你可以在以下這個
   檔案裡面,找到事先已經定義好的 Win32 Error Code
   C:\Program Files\Borland\CBuilder6\Include\winerror.h
   你可以找到 Win32 Error Code 的資料結構,以及每個 Error Code 的簡單
   說明
(6)你舉例的 function 看起來應該是一個 COM Interface 中的某個 method,
   像這種 function 傳回值的型態通常是 HRESULT,也就是一個 DWORD,跟上
   一點所提到的 Error Code 型態是完全符合的
(7)如果你曾經寫過 COM 而且用網頁來測試的話,會發現在 Debug 的過程中,
   經常會在 IE 裡面發現這種 Error Code (0x8.......)
(8)除了事先已經被定義好的 Error Code 可以拿來使用,另外,你也可以定義
   自己的 Error Code,不過要按照 (5) 檔案中的方法來定義,而且不可和事
   先已經被定義好的 Error Code 相同,例如:
   #define MY_ERROR_CODE_1 0x80001001L
   #define MY_ERROR_CODE_2 0x80001002L
   .................................
(9)定義好了之後,就可以在程式碼中依照不同的錯誤情況,傳回 Error Code
   if(error_condition_1)
   {
      return MY_ERROR_CODE_1;
   }
   else if(error_condition_2)
   {
      return MY_ERROR_CODE_2;
   }
   else if(.......)
   {
      return .......;
   }
(10)這樣子寫,不但程式碼易讀,而且程式在執行的時候可以馬上知道詳細的錯
    誤
-- Enjoy Researching & Developing -- 發表人 - RaynorPao 於 2004/06/24 14:14:38
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
系統時間:2024-07-01 20:06:07
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!