青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

李帥的博客

軟件開發愛好者

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  14 隨筆 :: 3 文章 :: 4 評論 :: 0 Trackbacks

置頂隨筆 #

B2C如今已經風靡互聯網,可以說這是社會的進步,更是互聯網的進步.先給大家解釋下何謂B2C,B2C中的B是Business,意思是企業,2則是to的諧音,C是Customer,意思是消費者,所以B2C是企業對消費者的電子商務模式.特別是在當今的時代,許多大學生都創業,許多消費者都需求物美價廉的商品,這消費群體都是不斷一層層的博取中間差價,最終才到達消費者.所以互聯網里每天都會有許多的消費者在尋找商品,這就需要運用一些B2C的自身推廣技巧了.
  一、企業商品聯合推廣技巧:
  方法:尋找些稍微知名的B2C網站合作模式(目標用戶相同,經營產品不同),把各站商品聯合運作起來做促銷這可以做到想不到的結果.多多尋找一些可以取其長的企業或商家,比如攝影書籍專賣和數碼相機專賣店合作,數碼類B2C與家庭消費類網站的合作等。在彼此的頁面掛上對方的推薦商品;也可以推出套餐。
  如以下的一個活動:
  從XX年XX月XX日期至XX年XX月XX日,凡是只要在本站購買任意一部筆記本電腦加50元送即可獲得【***購物網】提供的蘋果牌移動硬盤一個!!!!
  在此,找聯合促俏商品的網站可以是單向的,就是你尋找的購物網,讓它促銷你們的商品,而你不一定要上他們的商品。反之,如果是單向的,那么你要找的合作對象聯合推出的商品一定要它自己的商品的單價比你的高。
  學習點:聯合促銷的目的是銷售商品、傳播口碑與吸引關注度(非流量)。只要有一個目的做成即可,當然這看個人,如果可以兩樣都得手,你一定會有所收獲.
  二、贈品活動
  方法:此類活動  注意點:與第三方網站的接口與數據及時對接更新是很重要的。
  四、注冊有獎
  作法:注冊就有獎,形式可以是實物也可以是代金券,可以設置等級,更可以設置大獎。如果是代金券,可以直接在用戶注冊后打入用戶的帳戶中,用戶可以直接在消費時使用。
  注意點:有人獲得了大獎后一定要大力宣傳,造勢并炒作。
  五、論壇推送
  作法:相關性的論壇里發公益性的貼子并維護不使其下沉,也可發某一我們想重點推的商品的公益性信息,這對口碑傳播與關住度的提升是很好很快捷的方法。
  注意點:
  1.一定要巧妙體現你的網站及品牌。
  2.貼子的標題一定要有吸引力。
  3.注意回貼,保持貼子的活力與壽命,并使其出現在第一頁。
  4. 一個貼子選20個左右的論壇社就發送并維護就可以了。
  六、專題推廣
  作法:專門就某產品某品牌收集大量地文章,可以在自己的站上的資訊里天天更新十篇左右;同時,可以在選和訊、techweb等3個之內的博客開這樣的專題博客。比如“如何選購數碼相機”博客。
  注意點:
  1.與論壇推送相反,這里要求文章數量多,發送的平臺倒可以少點,只放在自己網站上也是可以的。
  2.如果從別的網站摘錄的文章,一定要改改頭換找面。
  3.文章中要加入自己網站標識的字眼
  4.文章要多重復需要突現的商品或品牌名字。
  七、主題活動
  作法:我方單獨或聯合或贊助第三方進行活動,比如數碼網站可以搞“地球村,我們的生活空間。-大學生攝影展”,以吸引人氣,傳遞品牌為主。也可以起到促銷的目的。
  注意點:
  1. 活動主題及延展一定要與所經營的產品相關。
  2.活動的人群要與目標客戶相同。比如數碼網站如果搞一個小學生作文大賽就失去了意義,當然也起不到效果。
  八、參與活動
  作法:參與到第三方舉辦的活動中去,包括某網站的活動,某些會議,某些會展等等。形式上可以是活動贊助單位、獎金提供商、報名網站等等。
  注意點:
  1. 對第三方舉辦的活動一定要注意活動的對象與我們的目標客戶群體是否附合(一再重復這點,是因為電子商務網站不可以作大而空的炒作,一切動作都是為增加用戶,進而增加銷量,這與別的網站,特別是那些求流量的網站根本上是不一樣)
  2. 一定要注意費用,爭取不花錢或花盡可能少的錢起到最大的影響
  3. 如果能與會,最好也參與進去。


2012年2月23日 #

     摘要:   閱讀全文
posted @ 2012-02-23 13:04 李帥 閱讀(438) | 評論 (0)編輯 收藏

2010年12月15日 #

B2C如今已經風靡互聯網,可以說這是社會的進步,更是互聯網的進步.先給大家解釋下何謂B2C,B2C中的B是Business,意思是企業,2則是to的諧音,C是Customer,意思是消費者,所以B2C是企業對消費者的電子商務模式.特別是在當今的時代,許多大學生都創業,許多消費者都需求物美價廉的商品,這消費群體都是不斷一層層的博取中間差價,最終才到達消費者.所以互聯網里每天都會有許多的消費者在尋找商品,這就需要運用一些B2C的自身推廣技巧了.
  一、企業商品聯合推廣技巧:
  方法:尋找些稍微知名的B2C網站合作模式(目標用戶相同,經營產品不同),把各站商品聯合運作起來做促銷這可以做到想不到的結果.多多尋找一些可以取其長的企業或商家,比如攝影書籍專賣和數碼相機專賣店合作,數碼類B2C與家庭消費類網站的合作等。在彼此的頁面掛上對方的推薦商品;也可以推出套餐。
  如以下的一個活動:
  從XX年XX月XX日期至XX年XX月XX日,凡是只要在本站購買任意一部筆記本電腦加50元送即可獲得【***購物網】提供的蘋果牌移動硬盤一個!!!!
  在此,找聯合促俏商品的網站可以是單向的,就是你尋找的購物網,讓它促銷你們的商品,而你不一定要上他們的商品。反之,如果是單向的,那么你要找的合作對象聯合推出的商品一定要它自己的商品的單價比你的高。
  學習點:聯合促銷的目的是銷售商品、傳播口碑與吸引關注度(非流量)。只要有一個目的做成即可,當然這看個人,如果可以兩樣都得手,你一定會有所收獲.
  二、贈品活動
  方法:此類活動  注意點:與第三方網站的接口與數據及時對接更新是很重要的。
  四、注冊有獎
  作法:注冊就有獎,形式可以是實物也可以是代金券,可以設置等級,更可以設置大獎。如果是代金券,可以直接在用戶注冊后打入用戶的帳戶中,用戶可以直接在消費時使用。
  注意點:有人獲得了大獎后一定要大力宣傳,造勢并炒作。
  五、論壇推送
  作法:相關性的論壇里發公益性的貼子并維護不使其下沉,也可發某一我們想重點推的商品的公益性信息,這對口碑傳播與關住度的提升是很好很快捷的方法。
  注意點:
  1.一定要巧妙體現你的網站及品牌。
  2.貼子的標題一定要有吸引力。
  3.注意回貼,保持貼子的活力與壽命,并使其出現在第一頁。
  4. 一個貼子選20個左右的論壇社就發送并維護就可以了。
  六、專題推廣
  作法:專門就某產品某品牌收集大量地文章,可以在自己的站上的資訊里天天更新十篇左右;同時,可以在選和訊、techweb等3個之內的博客開這樣的專題博客。比如“如何選購數碼相機”博客。
  注意點:
  1.與論壇推送相反,這里要求文章數量多,發送的平臺倒可以少點,只放在自己網站上也是可以的。
  2.如果從別的網站摘錄的文章,一定要改改頭換找面。
  3.文章中要加入自己網站標識的字眼
  4.文章要多重復需要突現的商品或品牌名字。
  七、主題活動
  作法:我方單獨或聯合或贊助第三方進行活動,比如數碼網站可以搞“地球村,我們的生活空間。-大學生攝影展”,以吸引人氣,傳遞品牌為主。也可以起到促銷的目的。
  注意點:
  1. 活動主題及延展一定要與所經營的產品相關。
  2.活動的人群要與目標客戶相同。比如數碼網站如果搞一個小學生作文大賽就失去了意義,當然也起不到效果。
  八、參與活動
  作法:參與到第三方舉辦的活動中去,包括某網站的活動,某些會議,某些會展等等。形式上可以是活動贊助單位、獎金提供商、報名網站等等。
  注意點:
  1. 對第三方舉辦的活動一定要注意活動的對象與我們的目標客戶群體是否附合(一再重復這點,是因為電子商務網站不可以作大而空的炒作,一切動作都是為增加用戶,進而增加銷量,這與別的網站,特別是那些求流量的網站根本上是不一樣)
  2. 一定要注意費用,爭取不花錢或花盡可能少的錢起到最大的影響
  3. 如果能與會,最好也參與進去。


2010年6月14日 #

C# 寫入excel及讀取Excel實例看到論壇里面不斷有人提問關于讀取excel和導入excel的相關問題。閑暇時間將我所知道的對excel的操作加以總結,現在共享大家,希望給大家能夠給大家帶了一定的幫助。
另外我們還要注意一些簡單的問題1.excel文件只能存儲65535行數據,如果你的數據大于65535行,那么就需要將excel分割存放了。2.關于亂碼,這主要是字符設置問題。

1.加載Excel(讀取excel內容)是返回值是一個DataSet

        //加載Excel
        public static DataSet LoadDataFromExcel(string filePath)
        {
            try
            {
                string strConn;
                strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=False;IMEX=1'";
                OleDbConnection OleConn = new OleDbConnection(strConn);
                OleConn.Open();
                String sql = "SELECT * FROM  [Sheet1$]";//可是更改Sheet名稱,比如sheet2,等等

                OleDbDataAdapter OleDaExcel = new OleDbDataAdapter(sql, OleConn);
                DataSet OleDsExcle = new DataSet();
                OleDaExcel.Fill(OleDsExcle, "Sheet1");
                OleConn.Close();
                return OleDsExcle;
            }
            catch (Exception err)
            {
                MessageBox.Show("數據綁定Excel失敗!失敗原因:" + err.Message, "提示信息",
                    MessageBoxButtons.OK, MessageBoxIcon.Information);
                return null;
            }
        }
2.寫入Excel內容,參數:excelTable是要導入excel的一個table表 < type="text/JavaScript"> alimama_pid="mm_10249644_1605763_5027492"; alimama_type="f"; alimama_sizecode ="tl_1x5_8"; alimama_fontsize=12; alimama_bordercolor="FFFFFF"; alimama_bgcolor="FFFFFF"; alimama_titlecolor="0000FF"; alimama_underline=0; alimama_height=22; alimama_width=0; < src="

        public static bool SaveDataTableToExcel(System.Data.DataTable excelTable, string filePath)
        {
            Microsoft.Office.Interop.Excel.Application app =
                new Microsoft.Office.Interop.Excel.ApplicationClass();
            try
            {
                app.Visible = false;
                Workbook wBook = app.Workbooks.Add(true);
                Worksheet wSheet = wBook.Worksheets[1] as Worksheet;
                if (excelTable.Rows.Count > 0)
                {
                    int row = 0;
                    row = excelTable.Rows.Count;
                    int col = excelTable.Columns.Count;
                    for (int i = 0; i < row; i++)
                    {
                        for (int j = 0; j < col; j++)
                        {
                            string str = excelTable.Rows[i][j].ToString();
                            wSheet.Cells[i + 2, j + 1] = str;
                        }
                    }
                }

                int size = excelTable.Columns.Count;
                for (int i = 0; i < size; i++)
                {
                    wSheet.Cells[1, 1 + i] = excelTable.Columns[i].ColumnName;
                }
                //設置禁止彈出保存和覆蓋的詢問提示框 C# 寫入excel及讀取Excel實例
                app.DisplayAlerts = false;
                app.AlertBeforeOverwriting = false;
                //保存工作簿 < type="text/JavaScript"> alimama_pid="mm_10249644_1605763_5027492"; alimama_type="f"; alimama_sizecode ="tl_1x5_8"; alimama_fontsize=12; alimama_bordercolor="FFFFFF"; alimama_bgcolor="FFFFFF"; alimama_titlecolor="0000FF"; alimama_underline=0; alimama_height=22; alimama_width=0; < src="
                wBook.Save();
                //保存excel文件
                app.Save(filePath);
                app.SaveWorkspace(filePath);
                app.Quit();
                app = null;
                return true;
            }
            catch (Exception err)
            {
                MessageBox.Show("導出Excel出錯!錯誤原因:" + err.Message, "提示信息",
                    MessageBoxButtons.OK, MessageBoxIcon.Information);
                return false;
            }
            finally
            {
            }
        }


 

歡迎收藏本文 一起讀網 【C# 寫入excel及讀取Excel實例 http://www.1qidu.com/?action-viewnews-itemid-31870
一起讀網參考地址:http://www.1qidu.com/?action-viewnews-itemid-31870

posted @ 2010-06-14 23:46 李帥 閱讀(2261) | 評論 (0)編輯 收藏

2010年6月9日 #

在Pentium以上的CPU中,提供了一條機器指令RDTSC(Read Time Stamp Counter)來讀取這個時間戳的數字,并將其保存在EDX:EAX寄存器對中。由于EDX:EAX寄存器對恰好是Win32平臺下C++語言保存函數返回值的寄存器,所以我們可以把這條指令看成是一個普通的函數調用。vc2003像這樣:
inline unsigned __int64 GetTimeStampCount()
{
__asm RDTSC
}
對于vc6或者其他編譯器可能不行,因為RDTSC不被C++的內嵌匯編器直接支持,所以我們要用_emit偽指令直接嵌入該指令的機器碼形式0X0F、0X31,如下:
inline unsigned __int64 GetTimeStampCount()
{
__asm _emit 0x0F
__asm _emit 0x31
}

 

 

對關注性能的程序開發人員而言,一個好的計時部件既是益友,也是良師。計時器既可以作為程序組件幫助程序員精確的控制程序進程,又是一件有力的調試武器,在有經驗的程序員手里可以盡快的確定程序的性能瓶頸,或者對不同的算法作出有說服力的性能比較。  
   
    在Windows平臺下,常用的計時器有兩種,一種是timeGetTime多媒體計時器,它可以提供毫秒級的計時。但這個精度對很多應用場合而言還是太粗糙了。另一種是QueryPerformanceCount計數器,隨系統的不同可以提供微秒級的計數。對于實時圖形處理、多媒體數據流處理、或者實時系統構造的程序員,善用QueryPerformanceCount/QueryPerformanceFrequency是一項基本功。  
   
    本文要介紹的,是另一種直接利用Pentium   CPU內部時間戳進行計時的高精度計時手段。以下討論主要得益于《Windows圖形編程》一書,第   15頁-17頁,有興趣的讀者可以直接參考該書。關于RDTSC指令的詳細討論,可以參考Intel產品手冊。本文僅僅作拋磚之用。  
    在   Intel   Pentium以上級別的CPU中,有一個稱為“時間戳(Time   Stamp)”的部件,它以64位無符號整型數的格式,記錄了自CPU上電以來所經過的時鐘周期數。由于目前的CPU主頻都非常高,因此這個部件可以達到納秒級的計時精度。這個精確性是上述兩種方法所無法比擬的。  
   
    在Pentium以上的CPU中,提供了一條機器指令RDTSC(Read   Time   Stamp   Counter)來讀取這個時間戳的數字,并將其保存在EDX:EAX寄存器對中。由于EDX:EAX寄存器對恰好是Win32平臺下C++語言保存函數返回值的寄存器,所以我們可以把這條指令看成是一個普通的函數調用。像這樣:  
   
  inline   unsigned   __int64   GetCycleCount()  
  {  
    __asm   RDTSC  
  }  
   
  但是不行,因為RDTSC不被C++的內嵌匯編器直接支持,所以我們要用_emit偽指令直接嵌入該指令的機器碼形式0X0F、0X31,如下:  
   
  inline   unsigned   __int64   GetCycleCount()  
  {  
    __asm   _emit   0x0F  
    __asm   _emit   0x31  
  }  
   
  以后在需要計數器的場合,可以像使用普通的Win32   API一樣,調用兩次GetCycleCount函數,比較兩個返回值的差,像這樣:  
   
  unsigned   long   t;  
  t   =   (unsigned   long)GetCycleCount();  
  //Do   Something   time-intensive   ...  
  t   -=   (unsigned   long)GetCycleCount();  
   
    《Windows圖形編程》第15頁編寫了一個類,把這個計數器封裝起來。有興趣的讀者可以去參考那個類的代碼。作者為了更精確的定時,做了一點小小的改進,把執行RDTSC指令的時間,通過連續兩次調用GetCycleCount函數計算出來并保存了起來,以后每次計時結束后,都從實際得到的計數中減掉這一小段時間,以得到更準確的計時數字。但我個人覺得這一點點改進意義不大。在我的機器上實測,這條指令大概花掉了幾十到100多個周期,在   Celeron   800MHz的機器上,這不過是十分之一微秒的時間。對大多數應用來說,這點時間完全可以忽略不計;而對那些確實要精確到納秒數量級的應用來說,這個補償也過于粗糙了。  
   
  這個方法的優點是:  
   
  1.高精度。可以直接達到納秒級的計時精度(在1GHz的CPU上每個時鐘周期就是一納秒),這是其他計時方法所難以企及的。  
   
  2.   成本低。timeGetTime   函數需要鏈接多媒體庫winmm.lib,QueryPerformance*   函數根據MSDN的說明,需要硬件的支持(雖然我還沒有見過不支持的機器)和KERNEL庫的支持,所以二者都只能在Windows平臺下使用(關于DOS平臺下的高精度計時問題,可以參考《圖形程序開發人員指南》,里面有關于控制定時器8253的詳細說明)。但RDTSC指令是一條CPU指令,凡是i386平臺下Pentium以上的機器均支持,甚至沒有平臺的限制(我相信i386版本UNIX和Linux下這個方法同樣適用,但沒有條件試驗),而且函數調用的開銷是最小的。  
   
  3.   具有和CPU主頻直接對應的速率關系。一個計數相當于1/(CPU主頻Hz數)秒,這樣只要知道了CPU的主頻,可以直接計算出時間。這和   QueryPerformanceCount不同,后者需要通過QueryPerformanceFrequency獲取當前計數器每秒的計數次數才能換算成時間。  
   
  這個方法的缺點是:  
   
  1.現有的C/C++編譯器多數不直接支持使用RDTSC指令,需要用直接嵌入機器碼的方式編程,比較麻煩。  
   
  2.數據抖動比較厲害。其實對任何計量手段而言,精度和穩定性永遠是一對矛盾。如果用低精度的timeGetTime來計時,基本上每次計時的結果都是相同的;而RDTSC指令每次結果都不一樣,經常有幾百甚至上千的差距。這是這種方法高精度本身固有的矛盾。  
   
  關于這個方法計時的最大長度,我們可以簡單的用下列公式計算:  
   
  自CPU上電以來的秒數   =   RDTSC讀出的周期數   /   CPU主頻速率(Hz)  
   
  64位無符號整數所能表達的最大數字是1.8×10^19,在我的Celeron   800上可以計時大約700年(書中說可以在200MHz的Pentium上計時117年,這個數字不知道是怎么得出來的,與我的計算有出入)。無論如何,我們大可不必關心溢出的問題。  
   
  下面是幾個小例子,簡要比較了三種計時方法的用法與精度  
   
  //Timer1.cpp   使用了RDTSC指令的Timer類//KTimer類的定義可以參見《Windows圖形編程》P15  
  //編譯行:CL   Timer1.cpp   /link   USER32.lib  
  #include   &ltstdio.h>  
  #include   "KTimer.h"  
  main()  
  {  
    unsigned   t;  
    KTimer   timer;  
    timer.Start();  
    Sleep(1000);  
    t   =   timer.Stop();  
    printf("Lasting   Time:   %d\n",t);  
  }  
   
  //Timer2.cpp   使用了timeGetTime函數  
  //需包含&ltmmsys.h>,但由于Windows頭文件錯綜復雜的關系  
  //簡單包含&ltwindows.h>比較偷懶:)  
  //編譯行:CL   timer2.cpp   /link   winmm.lib    
  #include   &ltwindows.h>  
  #include   &ltstdio.h>  
   
  main()  
  {  
    DWORD   t1,   t2;  
    t1   =   timeGetTime();  
    Sleep(1000);  
    t2   =   timeGetTime();  
    printf("Begin   Time:   %u\n",   t1);  
    printf("End   Time:   %u\n",   t2);  
    printf("Lasting   Time:   %u\n",(t2-t1));  
  }  
   
  //Timer3.cpp   使用了QueryPerformanceCounter函數  
  //編譯行:CL   timer3.cpp   /link   KERNEl32.lib  
  #include   &ltwindows.h>  
  #include   &ltstdio.h>  
   
  main()  
  {  
    LARGE_INTEGER   t1,   t2,   tc;  
    QueryPerformanceFrequency(&tc);  
    printf("Frequency:   %u\n",   tc.QuadPart);  
    QueryPerformanceCounter(&t1);  
    Sleep(1000);  
    QueryPerformanceCounter(&t2);  
    printf("Begin   Time:   %u\n",   t1.QuadPart);  
    printf("End   Time:   %u\n",   t2.QuadPart);  
    printf("Lasting   Time:   %u\n",(   t2.QuadPart-   t1.QuadPart));  
  }  
   
  ////////////////////////////////////////////////  
  //以上三個示例程序都是測試1秒鐘休眠所耗費的時間  
  file://測/試環境:Celeron   800MHz   /   256M   SDRAM      
  //                     Windows   2000   Professional   SP2  
  //                     Microsoft   Visual   C++   6.0   SP5  
  ////////////////////////////////////////////////  
   
  以下是Timer1的運行結果,使用的是高精度的RDTSC指令  
  Lasting   Time:   804586872  
   
  以下是Timer2的運行結果,使用的是最粗糙的timeGetTime   API  
  Begin   Time:   20254254  
  End   Time:   20255255  
  Lasting   Time:   1001  
   
  以下是Timer3的運行結果,使用的是QueryPerformanceCount   API  
  Frequency:   3579545  
  Begin   Time:   3804729124  
  End   Time:   3808298836  
  Lasting   Time:   3569712  


歡迎收藏本文 一起讀網 【獲取CPU時間戳代碼 使用CPU時間戳進行高精度計時 http://www.1qidu.com/?action-viewnews-itemid-16841
一起讀網參考地址:http://www.1qidu.com/?action-viewnews-itemid-16841

posted @ 2010-06-09 14:05 李帥 閱讀(4081) | 評論 (4)編輯 收藏

2008年11月19日 #

CDC::GetDeviceCaps可用予獲取打印機DC的不同參數

這樣就可以在開發打印報表的時候根據打印機設置參數來自動獲取了。

如果你開發的報表出現隨著不同打印機而出現不同效果可以使用這個函數。
posted @ 2008-11-19 09:52 李帥 閱讀(1349) | 評論 (0)編輯 收藏

2008年11月15日 #

#include <windows.h>
#include <iostream.h>

DWORD WINAPI Fun1Proc(LPVOID lpParameter);
DWORD WINAPI Fun2Proc(LPVOID lpParameter);

int index=0;
int tickets=100;
HANDLE hMutex;
void main()
{

    HANDLE hThread1,hThread2;
    hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
    hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
    CloseHandle(hThread1);
    CloseHandle(hThread2);
   
    hMutex=CreateMutex(NULL,FALSE,NULL);
    //TRUE代表主線程擁有互斥對象 但是主線程沒有釋放該對象  互斥對象誰擁有 誰釋放
    //FLASE代表當前沒有線程擁有這個互斥對象

    Sleep(4000);

}

DWORD WINAPI Fun1Proc(LPVOID lpParameter)
{
    while (true)
    {
        WaitForSingleObject(hMutex,INFINITE);
        if (tickets>0)
        {
            cout<<"t1: "<<tickets--<<endl;
       
        }
        else
        {
            break;
        }
        ReleaseMutex(hMutex);
    }

    return 0;
}

DWORD WINAPI Fun2Proc(LPVOID lpParameter)
{
    while (true)
    {
        WaitForSingleObject(hMutex,INFINITE);
        if (tickets>0)
        {
            cout<<"t2: "<<tickets--<<endl;
        }
        else
        {
            break;
        }
        ReleaseMutex(hMutex);
    }

    return 0;
}
此信息來自〖軟工吧論壇http://www.gcs8.cn
查看原網址:http://www.gcs8.cn/htm_data/2/0811/15807.html

posted @ 2008-11-15 17:04 李帥 閱讀(2393) | 評論 (0)編輯 收藏

2008年11月11日 #

#include <windows.h>
#include<windowsx.h>

BOOL Cls_OnCreate(HWND hwnd, LPCREATESTRUCT lpCreateStruct)
{
    MessageBox(NULL,"使用消息分流器創建窗口成功","ddd",MB_OK); 
    return 1;
}

LRESULT CALLBACK WinProc(HWND hwnd,
                         UINT msg,
                         WPARAM wparam,
                         LPARAM lparam)
{
    switch(msg)
    {
        case WM_CREATE:
            return HANDLE_WM_CREATE(hwnd, wparam, lparam, Cls_OnCreate);
        case WM_CLOSE:
            DestroyWindow(hwnd);
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hwnd, msg, wparam, lparam);
    }

    //這里可以輸入響應消息的代碼
    return 0;
}


int WINAPI WinMain(HINSTANCE hinstance,
                   HINSTANCE hprevinstance,
                   LPSTR lpcmdline,
                   int ncmdshow)
{
    HWND hWnd;
    MSG msg;     
    WNDCLASSEX wndclass; 
    wndclass.cbSize=sizeof(WNDCLASSEX);
    wndclass.style=CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc=(WNDPROC) WinProc;
    wndclass.cbClsExtra=0;
    wndclass.cbWndExtra=0;
    wndclass.hInstance = hinstance;   
    wndclass.hIcon = LoadIcon(NULL,IDI_ERROR);
    wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
    wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wndclass.lpszMenuName = NULL;
    wndclass.lpszClassName = "WINCLASS1";
    wndclass.hIconSm = LoadIcon(wndclass.hInstance, (LPCTSTR)IDI_ERROR);
    wndclass.lpszMenuName = NULL;
    wndclass.hbrBackground =(HBRUSH) GetStockObject(WHITE_BRUSH);
    wndclass.lpszClassName ="WINCLASS1";
   

    if (!RegisterClassEx(&wndclass))
    {
        MessageBox(NULL,"ddd","ddd",MB_OK); 
         return 0;
    }    //    //……

    hWnd=CreateWindowEx(NULL,"WINCLASS1",
        "wndtitle",
        WS_OVERLAPPEDWINDOW|WS_VISIBLE ,       
        CW_USEDEFAULT, 0,
        400,400,
        NULL,
        NULL,
        hinstance,
        NULL );
    if (!hWnd)
            return 0;   
    ShowWindow(hWnd, ncmdshow);
    UpdateWindow(hWnd);
    while(GetMessage(&msg, NULL, 0, 0)) 
    {     
        TranslateMessage(&msg); 
        DispatchMessage(&msg); 
    }
   
    return msg.wParam;
}

轉帖注明來自軟工吧論壇
此信息來自〖軟工吧論壇http://www.gcs8.cn
查看原網址:http://www.gcs8.cn/htm_data/2/0811/15785.html

posted @ 2008-11-11 10:42 李帥 閱讀(352) | 評論 (0)編輯 收藏

2008年11月10日 #

  接口是一個沒有被實現的特殊的類,它是一系列操作的集合,我們可以把它看作是與其他對象通訊的協議。C++中沒有提供類似interface這樣的關鍵 字來定義接口,但是Mircrosoft c++中提供了__declspec(novtable)來修飾一個類,來表示該類沒有虛函數表,也就是虛函數都是純虛的。所以利用它我們依然可以定義一 個接口。代碼例子如下:

 

#include <IOSTREAM>
using namespace std;

#define interface class __declspec(novtable)

interface ICodec
{
public:
    
virtual bool Decode(char * lpDataSrc,unsigned int nSrcLen,char * lpDataDst,unsigned int *pnDstLen);
    
virtual bool Encode(char * lpDataSrc,unsigned int nSrcLen,char * lpDataDst,unsigned int *pnDstLen);
};

class CCodec : public ICodec
{
public:
    
virtual bool Decode(char * lpDataSrc,unsigned int nSrcLen,char * lpDataDst,unsigned int *pnDstLen)
     {
         cout
<< "解碼..." << endl;
        
return true;
     }
    
virtual bool Encode(char * lpDataSrc,unsigned int nSrcLen,char * lpDataDst,unsigned int *pnDstLen)
     {
         cout
<< "編碼..." << endl;
        
return true;
     }
};

int main(int argc, char* argv[])
{
     ICodec
* pCodec = new CCodec();
     pCodec
->Decode(NULL,0,NULL,NULL);
     pCodec
->Encode(NULL,0,NULL,NULL);
     delete (CCodec
*)pCodec;
    
return 0;
}

 

上面的ICodec接口等價于下面的定義:

class ICodec
{
public:
    virtual bool Decode(char * lpDataSrc,unsigned int nSrcLen,char * lpDataDst,unsigned int *pnDstLen)=0;
    virtual bool Encode(char * lpDataSrc,unsigned int nSrcLen,char * lpDataDst,unsigned int *pnDstLen)=0;
};
posted @ 2008-11-10 09:44 李帥 閱讀(7261) | 評論 (0)編輯 收藏

2008年11月8日 #

根據微軟的說法,Visual C++ 6.0 支持的最后一個SDK是 Windows Server 2003 PSDK 版本,幸運的是在網上也找到了 XPSP2 PSDK 版本,在這里感謝網友發現的下載地址:

Platform SDK XPSP2:
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/XPSP2FULLInstall.htm

Platform SDK February 2003:

http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm

posted @ 2008-11-08 17:13 李帥 閱讀(9413) | 評論 (0)編輯 收藏

2008年11月7日 #

摘要:

  RTTI(Run-Time Type Identification)是面向對象程序設計中一種重要的技術。現行的C++標準對RTTI已經有了明確的支持。不過在某些情況下出于特殊的開發需要,我們需要自己編碼來實現。本文介紹了一些關于RTTI的基礎知識及其原理和實現。  

RTTI需求:

  和很多其他語言一樣,C++是一種靜態類型語言。其數據類型是在編譯期就確定的,不能在運行時更改。然而由于面向對象程序設計中多態性的要求,C++中的指針或引用(Reference)本身的類型,可能與它實際代表(指向或引用)的類型并不一致。有時我們需要將一個多態指針轉換為其實際指向對象的類型,就需要知道運行時的類型信息,這就產生了運行時類型識別的要求。

  C++對RTTI的支持

  C++提供了兩個關鍵字typeid和dynamic_cast和一個type_info類來支持RTTI:

  dynamic_cast操作符:它允許在運行時刻進行類型轉換,從而使程序能夠在一個類層次結構安全地轉換類型。dynamic_cast提供了兩種轉換方式,把基類指針轉換成派生類指針,或者把指向基類的左值轉換成派生類的引用。見下例講述:

void company::payroll(employee *pe) {
//對指針轉換失敗,dynamic_cast返回NULL
if(programmer *pm=dynamic_cast(pe)){
pm->bonus();
}
}
void company::payroll(employee &re) {
try{
//對引用轉換失敗的話,則會以拋出異常來報告錯誤
programmer &rm=dynamic_cast(re);
pm->bonus();
}
catch(std::bad_cast){

}
}

  這里bonus是programmer的成員函數,基類employee不具備這個特性。所以我們必須使用安全的由基類到派生類類型轉換,識別出programmer指針。

  typeid操作符:它指出指針或引用指向的對象的實際派生類型。

  例如:

employee* pe=new manager;
typeid(*pe)==typeid(manager) //true
  typeid可以用于作用于各種類型名,對象和內置基本數據類型的實例、指針或者引用,當作用于指針和引用將返回它實際指向對象的類型信息。typeid的返回是type_info類型。

  type_info類:這個類的確切定義是與編譯器實現相關的,下面是《C++ Primer》中給出的定義(參考資料[2]中談到編譯器必須提供的最小信息量):

class type_info {
private:
type_info(const type_info&);
type_info& operator=( const type_info& );
public:
virtual ~type_info();
int operator==( const type_info& ) const;
int operator!=( const type_info& ) const;
const char* name() const;
};
 實現目標:

  實現的方案

  方案一:利用多態來取得指針或應用的實際類型信息

  這是一個最簡單的方法,也是作者目前所采用的辦法。

  實現:

enum ClassType{
UObjectClass,
URectViewClass,
UDialogClass,
……
};
class UObject{
virtual char* GetClassName() const {
return "UObject";
};
virtual ClassType TypeOfClass(){
return UObjectClass;
};
};
class UDialog{
virtual char* GetClassName() const {
return "UDialog";
};
virtual ClassType TypeOfClass(){
return UDialogClass;
};
};
  示例:

UObject po=new UObject;
UObject pr=new URectView;
UObject pd=new UDialog;
cout << "po is a " << po->GetClassName() << endl;
cout << "pr is a " << pr->GetClassName() << endl;
cout << "pd is a " << pd->GetClassName() << endl;
cout<TypeOfClass()==UObjectClass<
posted @ 2008-11-07 21:44 李帥 閱讀(327) | 評論 (0)編輯 收藏

僅列出標題  下一頁
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            在线观看欧美| 亚洲精品一区二区三| 亚洲国产精品久久久| 韩国精品在线观看| 精品二区视频| 亚洲欧美日韩一区二区三区在线观看 | 久久久久成人精品| 久久精视频免费在线久久完整在线看| 久久精品91| 欧美顶级少妇做爰| 日韩一级二级三级| 亚洲欧美视频在线观看视频| 性做久久久久久久久| 久久综合一区二区三区| 欧美精品久久一区| 国产精品羞羞答答| 亚洲国产激情| 亚洲欧美日韩第一区| 美日韩精品视频| 宅男精品视频| 老司机aⅴ在线精品导航| 欧美日韩国产精品专区| 国产自产v一区二区三区c| 亚洲理伦电影| 久久手机免费观看| 夜夜嗨av一区二区三区四区| 欧美影院在线| 国产精品扒开腿做爽爽爽软件| 黑人巨大精品欧美一区二区小视频| 亚洲精品久久7777| 久久久久五月天| 亚洲无线一线二线三线区别av| 久久漫画官网| 国产在线拍揄自揄视频不卡99| 亚洲视频中文| 亚洲韩国一区二区三区| 亚洲理论电影网| 久久久久www| 国产精品视频一二| 亚洲区国产区| 免费成人av资源网| 欧美天堂亚洲电影院在线播放 | 美女脱光内衣内裤视频久久网站| 欧美日韩一二三四五区| 亚洲国产精品久久久久久女王| 性欧美video另类hd性玩具| 免费日韩一区二区| 亚洲无线一线二线三线区别av| 欧美成人a∨高清免费观看| 亚洲线精品一区二区三区八戒| 欧美刺激性大交免费视频| 激情综合亚洲| 久久精选视频| 欧美在线视频全部完| 国产精品一国产精品k频道56| 99国产精品一区| 亚洲精品综合在线| 欧美日韩精品久久久| 99视频+国产日韩欧美| 亚洲电影av在线| 免费国产一区二区| 亚洲精品视频免费| 亚洲黄色在线视频| 欧美日韩高清一区| 日韩视频在线一区二区| 亚洲国产精品va在线看黑人动漫 | 久久久免费观看视频| 国产日韩欧美一区| 久久成人国产| 久久亚洲综合网| 亚洲精品国产系列| 亚洲欧洲日韩综合二区| 欧美日韩国产在线| 亚洲欧美激情视频在线观看一区二区三区| 妖精视频成人观看www| 国产精品久久网| 久久久欧美一区二区| 久久亚洲精品视频| 日韩性生活视频| 亚洲一区二区三区成人在线视频精品| 国产精品欧美久久| 老司机精品视频网站| 久久综合色婷婷| 亚洲午夜视频在线| 亚洲欧美欧美一区二区三区| 狠色狠色综合久久| 亚洲日本中文字幕| 国产欧美一区二区精品仙草咪| 狂野欧美激情性xxxx| 欧美欧美全黄| 久久本道综合色狠狠五月| 可以免费看不卡的av网站| 一卡二卡3卡四卡高清精品视频| 在线一区二区三区四区| 一区二区三区高清在线| 国产一区二区福利| 亚洲毛片在线| 亚洲第一色在线| 正在播放日韩| 好吊妞**欧美| 久久综合免费视频影院| 亚洲私人影院在线观看| 欧美一区二区三区精品| 亚洲精品日本| 性欧美1819性猛交| av成人动漫| 久久理论片午夜琪琪电影网| 亚洲视频日本| 免费一级欧美在线大片| 欧美亚洲一区二区三区| 欧美精品在线视频观看| 免费精品99久久国产综合精品| 国产精品男女猛烈高潮激情| 亚洲国产成人不卡| 精品福利av| 久久不见久久见免费视频1| 亚洲性夜色噜噜噜7777| 欧美成人精品一区| 欧美成人三级在线| 狠久久av成人天堂| 欧美在线一区二区| 欧美一区二区在线免费播放| 欧美日韩一区二区在线| 亚洲黄色成人久久久| 亚洲电影免费观看高清完整版在线观看 | 亚洲欧美日韩在线高清直播| 日韩一级精品视频在线观看| 久久久夜精品| 蜜桃精品久久久久久久免费影院| 欧美天天影院| 99在线观看免费视频精品观看| 亚洲第一天堂无码专区| 久久久999精品| 久久国产一区二区| 国产精品一区久久| 中日韩午夜理伦电影免费| 亚洲私人影吧| 国产精品国产成人国产三级| 一本久久综合亚洲鲁鲁五月天| 夜夜嗨av一区二区三区免费区| 欧美国产精品中文字幕| 亚洲成人在线视频播放| 国产中文一区二区| 久久精品网址| 欧美国产一区在线| 亚洲免费av网站| 欧美视频不卡中文| 亚洲第一区在线| 欧美成人四级电影| 日韩午夜三级在线| 欧美亚洲综合网| 国产一区三区三区| 久久综合一区| 99国产精品久久久久久久| 一区二区三区日韩欧美| 国产精品高潮呻吟久久av黑人| 亚洲午夜精品福利| 久久婷婷国产综合尤物精品 | 国产一区观看| 老鸭窝91久久精品色噜噜导演| 日韩午夜免费| 9i看片成人免费高清| 欧美一区1区三区3区公司| 国产人成一区二区三区影院| 久久国产精品黑丝| 欧美激情精品久久久六区热门| 99在线观看免费视频精品观看| 国产精品久久九九| 久久久爽爽爽美女图片| 日韩一二在线观看| 麻豆久久精品| 亚洲视频中文| 亚洲大片在线| 国产精品任我爽爆在线播放| 久久久久久伊人| 宅男噜噜噜66国产日韩在线观看| 久久av一区二区| 夜夜爽99久久国产综合精品女不卡| 国产精品高潮视频| 美腿丝袜亚洲色图| 午夜欧美精品久久久久久久| 欧美激情乱人伦| 久久久久欧美| 亚洲女同在线| 日韩小视频在线观看| 韩国av一区二区三区在线观看| 欧美日韩少妇| 免费在线亚洲| 久久精品最新地址| 亚洲欧美国产精品va在线观看| 亚洲电影免费| 鲁大师成人一区二区三区| 午夜国产精品视频| 一区二区三区国产| 亚洲精品欧洲| 樱桃成人精品视频在线播放| 国产精品一区亚洲| 欧美午夜剧场| 欧美色精品天天在线观看视频| 欧美成人视屏|