欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      讀博士期間自己總結(jié)的VC筆記

      時間:2019-05-15 09:55:28下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《讀博士期間自己總結(jié)的VC筆記》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《讀博士期間自己總結(jié)的VC筆記》。

      第一篇:讀博士期間自己總結(jié)的VC筆記

      第一課

      1.MFC生成的C++源文件中都有StdAfx.h,此文件包含了常用的AFX函數(shù)的聲明,其中有afxwin.h,此文件包含了CRECT,CPoint,CWnd等許多類及其方法的聲明。2.Project->Setting->Debug可以加入命令行參數(shù)。

      3.在SDK中要加入“windows.h”和stdio.h。因為LoadCursor,MessageBox等函數(shù)的聲明在這個文件中。

      4.創(chuàng)建一個完整的窗口的四個步驟SDK,1設計窗口類,2注冊窗口類,3創(chuàng)建窗口,4顯示窗口

      5.函數(shù)名可以代表函數(shù)代碼的首地址,即可作為函數(shù)指針。

      6.要查看VC數(shù)據(jù)類型,可以在MSDN中輸入“BOOL”然后選擇“DATA TYPE”。7.atof將字符串轉(zhuǎn)化為float,atoi將字符串轉(zhuǎn)化為int型。8.所有從CWnd類派生的類都有m_hWnd句柄。

      9.變量的生命周期:可以認為出了包含它的大括號,這個變量的生命周期結(jié)束。所以全局變量的聲明位于所有大括號之外。但是用new聲明的變量和用static聲明的變量除外。

      10.SDK示范程序,見下面。

      11.sprintf格式化字符,其頭文件為stdio.h,在MFC中格式化字符用CString.Format 12.GetDC()與ReleaseDC()要成對使用,否則會內(nèi)存泄漏。同樣,BeginPaint()與EndPaint()。

      13.GetStockObject()得到畫筆、畫刷、字體、調(diào)色板的句柄,使用時必須用類型轉(zhuǎn)換。

      14.什么時候用NULL,什么時候用0.答,對指針賦值時用NULL,對變量賦值時用0.15.什么是野指針?答:將指針指向的變量的內(nèi)存釋放后,此指針即變成野指針!如何避免野指針?答:將此指針指向NULL即可。p=NULL;16.SDK代碼流程:

      #include “windows.h”//包含頭文件LoadCursor,TextOut等函數(shù) #include “stdio.h”//包含sprintf,printf等函數(shù) LRESULT CALLBACK MyProc(...);//聲明回調(diào)函數(shù) int WINAPI WinMain(){ WNDCLASS wndcls;//設計窗口類

      wndcls.hcursor=LoadCursor();//初始化....RegisterClass(&wndcls);//注冊窗口類 hwnd=CreateWindow(...);//創(chuàng)建窗口 ShowWindow(..);//顯示窗口 UpdateWindow(..);MSG msg;//定義消息結(jié)構(gòu)體

      while(GetMessage(...))//消息循環(huán) {...} return 0;}

      LRESULT CALLBACK MyProc(...)//實現(xiàn)回調(diào)函數(shù) { switch(uMsg){ case WM_CHAR: break;...} }

      第2課

      1.定義結(jié)構(gòu)體和類時別忘記在最后加入“;”號!例如Class Point{int x;int y;};2.#include 與#include “xxx.h”的區(qū)別:<>不查找運行時目錄,“"查找運行時目錄!

      3.類的定義中,如果未指明成員類型,則缺省為private.而結(jié)構(gòu)體中則缺省為public.4.引用:引用經(jīng)常用在函數(shù)的傳參上。另外數(shù)值交換函數(shù)也經(jīng)常用引用。例 change(int &x,int &y){int temp;temp=x;x=y;y=x}調(diào)用時即可以用 int a=3;int b=4;change(a,b);一般不用指針來作為參數(shù)進行數(shù)值交換。因為會引起歧義。

      5.通常將類的定義放.h文件,而將其實現(xiàn)放在cpp文件中,別忘記了在cpp文件中#include ”xxx.h“ 6.如何防止類的重復定義? 用#inndef Point_H_H #define Point_H_H class Point{};#endif來防止

      7.源文件cpp文件單獨編譯成obj文件。最后由鏈接器將與將要使用到的C++標準庫類鏈接成exe文件,頭文件不參加編譯。所以在cpp文件中別忘記了加入#include ”xxx.h“ 8.函數(shù)的覆蓋,在子類中重寫父類的函數(shù),此時采用早期綁定的方法。如果加入了virtual,則將采用遲綁定的技術(shù),在運行時根據(jù)對象的類型確定調(diào)用哪一個函數(shù)。此遲綁定技術(shù)是MFC的類的繼承的精髓。

      9.強制類型轉(zhuǎn)換。如果CFish從CAnimal派生而來。則可以將魚的對象轉(zhuǎn)換為CAnimal的對象,而反之則不行。從現(xiàn)實中理解也是正常的,魚可以是動物,而動物卻不是魚。再如int可以強制轉(zhuǎn)換成char型。而反之則出錯。

      第3課

      1.在main或WinMain之前,全局變量已經(jīng)被分配內(nèi)存并初始化了。2.在MFC中在WinMain之前有個theApp全局變量先被構(gòu)造并被初始化,而由于子類構(gòu)造函數(shù)執(zhí)行前,其父類的構(gòu)造函數(shù)先被執(zhí)行,所以CTestApp的父類CWinAPP的構(gòu)造函數(shù)先執(zhí)行。產(chǎn)生了theApp對象后,在WinMain()中的指針*pThread和*pApp就有了內(nèi)容。3.MFC大致流程:

      CTestApp theApp;//構(gòu)造全局對象 WinMain(){ AfxWinMain();//調(diào)用下面的函數(shù) } AfxWinMain(){ pThread->Initinstance();//初始化工作和注冊窗口類,窗口顯示和更新 pThread->Run();//消息循環(huán) } 而在BOOL CTestApp::InitInstance()中的代碼 CSingleDocTemplate* pDocTemplate;pDocTemplate = new CSingleDocTemplate(IDR_MAINFRAME, RUNTIME_CLASS(CTestDoc), RUNTIME_CLASS(CMainFrame), // main SDI frame window RUNTIME_CLASS(CTestView));AddDocTemplate(pDocTemplate);完成了將這三個類關(guān)聯(lián)起來的工作。

      4.如何在單文檔文件中顯示一個CButton的對象?

      在CMainFrame::OnCreate()中定義一個CButton的對象btn;然后調(diào)用btn.Create(”維新“,WS_DISABLED |WS_CHILD | WS_VISIBLE | BS_AUTO3STATE, CRect(0,0,300,100),/*GetParent(),*/this,123);注意點:

      (1).此處btn不能是局部變量,否則它的生命周期太短,將不能顯示。(2).在create函數(shù)的第二個參數(shù)中加入WS_VISIBLE 參數(shù)才行。否則必須調(diào)用ShowWindow 也可以在view的OnCreate消息響應函數(shù)中加入(3).CButton類的定義頭文件在afxwin.h中,而stdafx.h包含了afxwin.h,所以可以直接使用。因為MFC中的每一個類中都有#include ”stdafx.h“的聲明。

      第4課

      1.在單文檔中view擋在MainFrame的前面。此時如果編寫針對MainFrame的mouseClick事件,將不會有反應。

      2.消息響應會在3處修改代碼,1處是在頭文件中,//{{AFX_MSG(CDrawView)afx_msg void OnLButtonDown(UINT nFlags, CPoint point);afx_msg void OnLButtonUp(UINT nFlags, CPoint point);afx_msg void OnMouseMove(UINT nFlags, CPoint point);//}}AFX_MSG DECLARE_MESSAGE_MAP()另一處是cpp文件的begin MessageMap和End MessageMap之間,BEGIN_MESSAGE_MAP(CDrawView, CView)//{{AFX_MSG_MAP(CDrawView)ON_WM_LBUTTONDOWN()ON_WM_LBUTTONUP()ON_WM_MOUSEMOVE()//}}AFX_MSG_MAP // Standard printing commands ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)END_MESSAGE_MAP()最后是要有函數(shù)實現(xiàn)的代碼。

      void CDrawView::OnLButtonDown(UINT nFlags, CPoint point){ // TOD Add your message handler code here and/or call default m_ptOrigin=m_ptOld=point;m_bDraw=TRUE;CView::OnLButtonDown(nFlags, point);} 3.畫線:定義一個成員變量保存mouseDown的點m_Point 1)API函數(shù)方法畫線用HDC 2)用CDC類成員函數(shù)畫線。此時別忘記ReleaseDC 3)用CClientDC 4)用CWindowDC,用它甚至可以整個屏幕區(qū)域畫線。下面是上面4種方法的代碼 /*HDC hdc;hdc=::GetDC(m_hWnd);MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);LineTo(hdc,point.x,point.y);::ReleaseDC(m_hWnd,hdc);必須成對使用。*/ /*CDC *pDC=GetDC();pDC->MoveTo(m_ptOrigin);pDC->LineTo(point);ReleaseDC(pDC);必須成對使用。*/

      //CClientDC dc(this);/*CClientDC dc(GetParent());dc.MoveTo(m_ptOrigin);dc.LineTo(point);此處不需要ReleaseDC,因為CClientDC會自動釋放DC*/

      //CWindowDC dc(this);//CWindowDC dc(GetParent());/*CWindowDC dc(GetDesktopWindow());//此時可以在整個屏幕上畫線。dc.MoveTo(m_ptOrigin);dc.LineTo(point);*/ /*CPen pen(PS_DOT,1,RGB(0,255,0));CClientDC dc(this);CPen *pOldPen=dc.SelectObject(&pen);dc.MoveTo(m_ptOrigin);dc.LineTo(point);dc.SelectObject(pOldPen);*/ 5)用Bitmap填充所畫的矩形。CBitmap bitmap;bitmap.LoadBitmap(IDB_BITMAP1);CBrush brush(&bitmap);CClientDC dc(this);dc.FillRect(CRect(m_ptOrigin,point),&brush);//CBRUSH::FromHandle是靜態(tài)成員函數(shù),所以可以用下面的方法調(diào)用。CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));CBrush *pOldBrush=dc.SelectObject(pBrush);dc.Rectangle(CRect(m_ptOrigin,point));dc.SelectObject(pOldBrush);m_bDraw=FALSE;6)用其它顏色畫線 CClientDC dc(this);CPen pen(PS_SOLID,1,RGB(255,0,0));CPen *pOldPen=dc.SelectObject(&pen);//選中紅色畫筆 if(m_bDraw==TRUE){ dc.SetROP2(R2_BLACK);//設置繪畫模式 dc.MoveTo(m_ptOrigin);//dc.LineTo(point);dc.LineTo(m_ptOld);//dc.MoveTo(m_ptOrigin);dc.MoveTo(m_ptOld);dc.LineTo(point);//m_ptOrigin=point;m_ptOld=point;} dc.SelectObject(pOldPen);4.MFC中隱式的包含了windows.h。為什么? 因為在AFXV_W32.h文件中:

      // This is a part of the Microsoft Foundation Classes C++ library.// Copyright(C)1992-1998 Microsoft Corporation // All rights reserved.在AFXWIN.h中

      // Note: WINDOWS.H already included from AFXV_W32.H 5.如何從句柄獲得對象的指針? 答FromHandle 6.類的靜態(tài)成員函數(shù)可以由類名直接調(diào)用,也可以由對象調(diào)用??梢哉J為靜態(tài)成員函數(shù)并不屬于某個對象,它屬于類本身。程序運行伊始,即使沒有實例化類的對象,靜態(tài)成員函數(shù)和靜態(tài)成員變量已然有其內(nèi)存空間。靜態(tài)成員函數(shù)不能訪問非靜態(tài)成員變量!靜態(tài)成員變量必須在類的外部初始化。當然如果并不打算用到靜態(tài)成員變量,此時你可以不初始它。7.理解代碼區(qū),數(shù)據(jù)區(qū),堆,棧!請見下面的簡介:

      http://004km.cnamedPipeSrvView::OnPipeCreate(){ // TOD Add your command handler code here hPipe=CreateNamedPipe(”.pipeMyPipe“, PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED, 0,1,1024,1024,0,NULL);if(INVALID_HANDLE_VALUE==hPipe){ MessageBox(”創(chuàng)建命名管道失敗!“);hPipe=NULL;return;} HANDLE hEvent;hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);if(!hEvent){ MessageBox(”創(chuàng)建事件對象失敗!“);CloseHandle(hPipe);hPipe=NULL;return;} OVERLAPPED ovlap;ZeroMemory(&ovlap,sizeof(OVERLAPPED));ovlap.hEvent=hEvent;if(!ConnectNamedPipe(hPipe,&ovlap)){ if(ERROR_IO_PENDING!=GetLastError()){ MessageBox(”等待客戶端連接失敗!“);CloseHandle(hPipe);CloseHandle(hEvent);hPipe=NULL;return;} } if(WAIT_FAILED==WaitForSingleObject(hEvent,INFINITE)){ MessageBox(”等待對象失敗!“);CloseHandle(hPipe);CloseHandle(hEvent);hPipe=NULL;return;} CloseHandle(hEvent);} void CNamedPipeSrvView::OnPipeRead(){ // TOD Add your command handler code here char buf[100];DWORD dwRead;if(!ReadFile(hPipe,buf,100,&dwRead,NULL)){ MessageBox(”讀取數(shù)據(jù)失??!“);return;} MessageBox(buf);} void CNamedPipeSrvView::OnPipeWrite(){ // TOD Add your command handler code here char buf[]=”http://004km.cnamedPipeCltView::OnPipeConnect()連接管道 { // TOD Add your command handler code here if(!WaitNamedPipe(“.pipeMyPipe”,NMPWAIT_WAIT_FOREVER)){ MessageBox(“當前沒有可利用的命名管道實例!”);return;} hPipe=CreateFile(“.pipeMyPipe”,GENERIC_READ | GENERIC_WRITE, 0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);if(INVALID_HANDLE_VALUE==hPipe){ MessageBox(“打開命名管道失??!”);hPipe=NULL;return;} } void CNamedPipeCltView::OnPipeRead()讀取數(shù)據(jù) { // TOD Add your command handler code here char buf[100];DWORD dwRead;if(!ReadFile(hPipe,buf,100,&dwRead,NULL)){ MessageBox(“讀取數(shù)據(jù)失敗!”);return;} MessageBox(buf);} void CNamedPipeCltView::OnPipeWrite()寫入數(shù)據(jù) { // TOD Add your command handler code here char buf[]=“命名管道測試程序”;DWORD dwWrite;if(!WriteFile(hPipe,buf,strlen(buf)+1,&dwWrite,NULL)){ MessageBox(“寫入數(shù)據(jù)失?。 ?;return;} } 4.郵槽,使用時應將消息長度限制在424字節(jié)以下,關(guān)鍵函數(shù)CreateMailSlot()a.先建一個MailSlotSRV工程,加菜單“接收數(shù)據(jù)” b.消息響應代碼:

      void CMailslotSrvView::OnMailslotRecv()菜單“接收數(shù)據(jù)”的代碼 { // TOD Add your command handler code here HANDLE hMailslot;hMailslot=CreateMailslot(“.mailslotMyMailslot”,0, MAILSLOT_WAIT_FOREVER,NULL);if(INVALID_HANDLE_VALUE==hMailslot){ MessageBox(“創(chuàng)建油槽失敗!”);return;} char buf[100];DWORD dwRead;if(!ReadFile(hMailslot,buf,100,&dwRead,NULL)){ MessageBox(“讀取數(shù)據(jù)失?。 ?;CloseHandle(hMailslot);return;} MessageBox(buf);CloseHandle(hMailslot);} c.加工程MailSlotCLT,加菜單“發(fā)送數(shù)據(jù)” d.加消息響應,添加代碼,客戶端也比較簡單。

      void CMailslotCltView::OnMailslotSend()菜單“發(fā)送數(shù)據(jù)”的代碼 { // TOD Add your command handler code here HANDLE hMailslot;hMailslot=CreateFile(“.mailslotMyMailslot”,GENERIC_WRITE, FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);if(INVALID_HANDLE_VALUE==hMailslot){ MessageBox(“打開油槽失敗!”);return;} char buf[]=“http://004km.cn”;DWORD dwWrite;if(!WriteFile(hMailslot,buf,strlen(buf)+1,&dwWrite,NULL)){ MessageBox(“寫入數(shù)據(jù)失??!”);CloseHandle(hMailslot);return;} CloseHandle(hMailslot);} 5.以上4種方法各有優(yōu)缺點:剪貼板比較簡單。郵槽是基于廣播的,可以一對多發(fā)送。但只能一個發(fā)送,一個接收,要想同時發(fā)送接收,須寫兩次代碼。命名管道和郵槽可以進行網(wǎng)絡通信。

      第18課 ActiveX編程(下面X均為ActiveX簡稱)1.在VB中調(diào)用X控件,添加方法 project->Add components。另外可以用Object Browser來查看控件 2.在VC中創(chuàng)建X控件

      1.新建一個X工程名為Clock,注意一個文件中可以包含多個控件。2.保持缺省設置,完成。注意它生成的三個類,以及相關(guān)的接口。3.運行它。選擇TSTCON32.exe作為容器。

      4.選擇Insert Control,此時我們可以看到,它畫了一個橢圓。也可以在VB中測試。

      5.刪除注冊信息。用regsvr32 /u +文件名。也可以在菜單選擇反注冊命令。6.重寫代碼。在CClockCtrl::OnDraw()中畫了一個橢圓,此時我們在其中得到系統(tǒng)時間,并顯示它。為此我們在OnCreate()設置了一個定時器,每隔一定時間發(fā)出一個Invalidate()消息,使窗口重繪。

      7.如何改變控件的背景色和前景色?ClassWizard->AutoMation->Add Property->BackColor,還需要在OnDraw()中加上相應的代碼 CBrush brush(TranslateColor(GetBackColor()));pdc->FillRect(rcBounds, &brush);pdc->SetBkMode(TRANSPARENT);pdc->SetTextColor(TranslateColor(GetForeColor()));8.增加屬性頁。在

      BEGIN_PROPPAGEIDS(CClockCtrl, 2)此時數(shù)目也得改成相應的數(shù)目 PROPPAGEID(CClockPropPage::guid)PROPPAGEID(CLSID_CColorPropPage)END_PROPPAGEIDS(CClockCtrl)OK~ 9.增加自定義屬性:ClassWizard->AutoMation->Add Property加上一個變量m_interval,類型為short,對應外部變量為Interval。在CClockCtrl中增加OnIntervalChanged方法。添加如下代碼: if(m_interval<0 || m_interval>6000){ m_interval=1000;} else { m_interval=m_interval/1000*1000;KillTimer(1);SetTimer(1,m_interval,NULL);BoundPropertyChanged(0x1);} 10.測試:Control->Invoke Methods 11.將時間間隔加到屬性頁中,在資源視圖中加入一文本框和編輯框。為EditBox關(guān)聯(lián)成員變量,加入屬性interval。12.增加方法:ClassWizard->AutoMation->Add Method->Hello加入代碼 OK!在VB中可以調(diào)用此方法!

      void CClockCtrl::Hello(){ // TOD Add your dispatch handler code here MessageBox(“Hello world!”);} 13.增加事件:ClassWizard->AutoMation->Add Events->Click 14.增加自定義事件:ClassWizard->AutoMation->Add Events->NewMinute 在新的一分鐘到達時發(fā)出這個通知,在OnDraw()中寫代碼: CTime time=CTime::GetCurrentTime();if(0==time.GetSecond()){ FireNewMinute();} 15.讓Interval屬性具有持久性。在CClockCtrl::DoPropExchange()中調(diào)用PX_short()方法,OK!

      PX_Short(pPX,“Interval”,m_interval,1000);16.讓Property Page和Property屬性中的interval保持一致的方法:在OnIntervalChanged()中調(diào)用BoundPropertyChanged(0x1);17.希望控件在設計時間內(nèi)不走動的方法:在OnTimer()中,if(AmbientUserMode())InvalidateControl();巧妙!3.在VC中調(diào)用X控件

      1.新建ClockTest對話框應用程序 2.點擊右鍵->插入X控件->時鐘控件

      3.Project->Add Component會生成CClock類。

      4.在CCLockTestDlg中增加CClock類的成員變量m_clock,然后可以動態(tài)創(chuàng)建一個這樣的東東!

      5.試驗Click(),NewMinute(),SetBkColor(),SetForeColor()方法和屬性 6.如何為動態(tài)創(chuàng)建的控件做事件響應呢?首先你得知道它的ID號,然后參考非動態(tài)的控件事件代碼,呵。第19課 DLL編程

      1.DLL簡介,動態(tài)庫,靜態(tài)庫。動態(tài)庫節(jié)約磁盤空間,靜態(tài)庫體積大??梢杂枚喾N語言編寫DLL文件。動態(tài)庫有兩種加載方式:隱式調(diào)用和動態(tài)加裁!2.新建一個DLL1的dll工程,加入一源文件名為dll1.cpp,加入add和subtract兩個函數(shù),注意此時須在函數(shù)名前加_declspec(dllexport),并且編譯。用dumpbi-exports dll1.dll查看其導出的函數(shù),發(fā)現(xiàn)函數(shù)名字已經(jīng)被改成了 ?add@@YAHHH@Z,這種現(xiàn)象叫做名字粉碎,是為了支持函數(shù)重載而做的。

      3.編寫一個程序測試DLL,工程名為DllTest,基于對話框的,放置兩個按紐add和subtract,響應按紐消息,調(diào)用這個Dll的add和subtract函數(shù)。使用這兩個函數(shù)前要先聲明函數(shù),//extern int add(int a,int b);//extern int subtract(int a,int b);還需要將Dll1.lib和Dll1.dll拷貝到當前目錄下!另外還需要在Project->Setting->Link->Object/Library中加入Dll1.lib,此種方式為隱式調(diào)用!OK!用Dumpbin-imports DllTest.exe查看它的輸入信息,可以看到它加載了dll1.dll。同時也可以用depends程序查看程序需要哪些dll文件!除了用extern外,還可以用//_declspec(dllimport)int add(int a,int b);//_declspec(dllimport)int subtract(int a,int b);告訴編譯器,此函數(shù)是動態(tài)鏈接庫中的函數(shù),這樣可以提高效率。

      4.通常寫Dll時在dll1.h中聲明函數(shù),然后在DllTest.h中包含這個頭文件,另外會用一組宏來取代_declspec(dllimport)Dll1.h #ifdef DLL1_API #else #define DLL1_API extern “C” _declspec(dllimport)#endif DLL1_API int _stdcall add(int a,int b);DLL1_API int _stdcall subtract(int a,int b);Dll1.cpp的代碼:

      #define DLL1_API extern “C” _declspec(dllexport)#include “Dll1.h” #include #include int _stdcall add(int a,int b){ return a+b;} int _stdcall subtract(int a,int b){ return a-b;} 5.在Dll1中加入類Point它有一個函數(shù)output(int a,intb),它的功能是在屏幕上輸出x,y值。須包含頭文件windows.h和stdio.h.然后在DllTest中加入一個按紐來測試這個函數(shù)!此時我們可以dumpbin來查看dll1.dll和dllTest.exe的導出導入情況。注意,也可以只導出類的某個函數(shù)。

      6.我們希望導出的函數(shù)名不被改變,加extern “C”大寫的C!即可,#define DLL1_API extern “C” _declspec(dllexport),但它只能導出全局函數(shù),不能導出類的成員函數(shù),并且如果調(diào)用約定被改成了別的方式,此時函數(shù)名也被改變。所以這種方式不太好。

      7.解決之道是用模塊定義文件。1.新建dll2.dll工程;

      2.加dll2.cpp中寫兩個函數(shù)add和subtract 3.在目錄中新建dll2.def文件,增加到工程。4.在dll2.def中加入如下代碼: LIBRARY Dll2 EXPORTS add subtract 5.編譯后用dumpbin查看函數(shù)名是否被改變?

      6.測試,我們這次用動態(tài)加載的方法來調(diào)用dll文件。以前是用隱式鏈接的方法,嘿嘿。動態(tài)加載的好處是需要時再加載,可以提高執(zhí)行的效率。代碼如下: HINSTANCE hInst;hInst=LoadLibrary(“Dll3.dll”);typedef int(/*_stdcall*/ *ADDPROC)(int a,int b);//ADDPROC Add=(ADDPROC)GetProcAddress(hInst,“?add@@YAHHH@Z”);ADDPROC Add=(ADDPROC)GetProcAddress(hInst,MAKEINTRESOURCE(1));if(!Add){ MessageBox(“獲取函數(shù)地址失敗!”);return;} CString str;str.Format(“5+3=%d”,Add(5,3));MessageBox(str);FreeLibrary(hInst);7.此時你改變調(diào)用約定,函數(shù)名不會被改變,但如果你加上_stdcall定義函數(shù),調(diào)用時也需要加入_stdcall,否則會出錯!

      8.DllMain()是Dll的入口點,不過不是必須的。但在DllMain中不要做復雜的調(diào)用。為什么?因為DllMain加載時,某些核心Dll文件不一定已經(jīng)被加載。9.創(chuàng)建一個基于MFC的DLL工程,簡介。

      10.當不使用DLL時,調(diào)用FreeLibrary減少DLL的使用計數(shù),釋放DLL資源,減少系統(tǒng)負擔。明白?

      11.上面總結(jié):1.*.def使函數(shù)名不改變;

      2.定義時為_stdcall,調(diào)用時也必須用_stdcall.第20課 鉤子與數(shù)據(jù)庫編程

      1.Hook簡介:作用是攔截某些消息,關(guān)鍵函數(shù)是SetWindowsHookEX()2.示例程序:

      1.新建一基于對話框工程,InnerHook,此過程的鉤子是只攔截本進程的。2.在OnInitDialog()中添加代碼: g_hWnd=m_hWnd;

      g_hMouse=SetWindowsHookEx(WH_MOUSE,MouseProc,NULL,GetCurrentThreadId());設置了鼠標鉤子

      g_hKeyboard=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,NULL,GetCurrentThreadId());設置了鍵盤鉤子 3.完成鉤子函數(shù)的編寫: HHOOK g_hKeyboard=NULL;HHOOK g_hMouse;HWND g_hWnd=NULL;

      LRESULT CALLBACK MouseProc(int nCode, // hook code WPARAM wParam, // message identifier LPARAM lParam // mouse coordinates){ return 1;}

      LRESULT CALLBACK KeyboardProc(int code, // hook code WPARAM wParam, // virtual-key code LPARAM lParam // keystroke-message information){ //if(VK_SPACE==wParam || VK_RETURN==wParam)如果是空格鍵 /*if(VK_F4==wParam &&(1==(lParam>>29 & 1)))攔截ALT+F4按鍵!return 1;else return CallNextHookEx(g_hKeyboard,code,wParam,lParam);*/ if(VK_F2==wParam)按F2時程序可以退出,這是留的后門。否則程序無法關(guān)閉,只能用任務管理器來關(guān)閉它了。{ ::SendMessage(g_hWnd,WM_CLOSE,0,0);UnhookWindowsHookEx(g_hKeyboard);當程序退出時最好將鉤子移除。UnhookWindowsHookEx(g_hMouse);} return 1;} 3.編寫一個屏屏蔽所有進程和所有線程的鉤子程序。此時這個鉤子必須安裝在DLL中,然后被某個程序調(diào)用才行。1.新建一個DLL工程名為Hook 2.增加Hook.cpp 3.代碼如下:

      #include 包含頭文件

      HHOOK g_hMouse=NULL;HHOOK g_hKeyboard=NULL;

      #pragma data_seg(“MySec”)新建了一個節(jié),用于將下 面的這個變量設為全局共享。

      HWND g_hWnd=NULL;這個變量是全局共享的。#pragma data_seg()

      //#pragma comment(linker,“/section:MySec,RWS”)/*HINSTANCE g_hInst;

      BOOL WINAPI DllMain(HINSTANCE hinstDLL, // handle to the DLL module DWORD fdwReason, // reason for calling function LPVOID lpvReserved // reserved){ g_hInst=hinstDLL;}*/

      LRESULT CALLBACK MouseProc(int nCode, // hook code WPARAM wParam, // message identifier LPARAM lParam // mouse coordinates){ return 1;攔截了鼠標消息。}

      LRESULT CALLBACK KeyboardProc(int code, // hook code WPARAM wParam, // virtual-key code LPARAM lParam // keystroke-message information){ if(VK_F2==wParam)如果是F2鍵,則退出。{ SendMessage(g_hWnd,WM_CLOSE,0,0);UnhookWindowsHookEx(g_hMouse);當退出時將鉤子卸掉。UnhookWindowsHookEx(g_hKeyboard);} return 1;}

      void SetHook(HWND hwnd)此函數(shù)設置了鉤子。{ g_hWnd=hwnd;注意這種傳遞調(diào)用它的進程的句柄的方法,比較巧妙!

      g_hMouse=SetWindowsHookEx(WH_MOUSE,MouseProc,GetModuleHandle(“Hook”),0);

      g_hKeyboard=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle(“Hook”),0);} Hook.DEF的代碼如下: LIBRARY Hook EXPORTS SetHook @2 SEGMENTS MySec READ WRITE SHARED 也可以設置節(jié)的屬性。

      4.新建一個工程調(diào)用此鉤子函數(shù)。工程名為HookTest,基于對話框的。在OnInitDialog()中調(diào)用SetHook(),要事先聲明_declspec(dllimport)void SetHook(HWND hwnd);然后在Project->Setting->Link->加入..HookDebugHook.lib,并將Hook.Dll拷貝到當前目錄。int cxScreen,cyScreen;cxScreen=GetSystemMetrics(SM_CXSCREEN);cyScreen=GetSystemMetrics(SM_CYSCREEN);SetWindowPos(&wndTopMost,0,0,cxScreen,cyScreen,SWP_SHOWWINDOW);將窗口保持在最前面。SetHook(m_hWnd);5.DLL的調(diào)試方法,設置斷點,然后運行時斷點時,step into即可。4.數(shù)據(jù)庫編程

      1.ODBC,ADO簡介:ADO可以認為是建立在ODBC上的。ADO的三個核心對象 Connection對象

      Connection對象表示了到數(shù)據(jù)庫的連接,它管理應用程序和數(shù)據(jù)庫之間的通信。Recordset和Command對象都有一個ActiveConnection屬性,該屬性用來引用Connection對象。Command對象

      Command對象被用來處理重復執(zhí)行的查詢,或處理需要檢查在存儲過程調(diào)用中的輸出或返回參數(shù)的值的查詢。Recordset對象

      Recordset對象被用來獲取數(shù)據(jù)。Recordset對象存放查詢的結(jié)果,這些結(jié)果由數(shù)據(jù)的行(稱為記錄)和列(稱為字段)組成。每一列都存放在Recordset的Fields集合中的一個Field對象中。

      2.演示在VB中使用ADO的方法,方法比較簡單,使用方便。另外在VB中演示了Connection和Command和Recordset的方法,用這三種方法都可以執(zhí)行SQL語句。

      3.在VC中利用ADO訪問數(shù)據(jù)庫。

      1.新建一個基于對話框的工程,名為ADO。

      2.在對話框中放一ListBox和一個Button控件。

      3.在使用時須導入MSADO15.dll,方法是在StdAfx.h中#import “D:Program FilesCommon FilesSystemadomsado15.dll” no_namespace rename(“EOF”,“rsEOF”)至少于將EOF改名為rsEOF,是為了避免與文件中的EOF重名。然后編譯程序,將產(chǎn)生的debug目錄下的兩個文件MSADO15.tlh和MSADO15.tli加到工程中,其目的只是方便我們查看而已。并不是編譯需要它。

      ADO也是COM組件,須初始化COM庫方法是CoInitialize(NULL);使用完后須CoUninitialize();代碼如下:

      void CAdoDlg::OnBtnQuery(){ // TOD Add your control notification handler code here CoInitialize(NULL);初始化

      _ConnectionPtr pConn(__uuidof(Connection));產(chǎn)生connection智能指針 _RecordsetPtr pRst(__uuidof(Recordset));產(chǎn)生recordset智能指針 _CommandPtr pCmd(__uuidof(Command));產(chǎn)生command智能指針

      pConn->ConnectionString=“Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=pubs”;數(shù)據(jù)庫信息 pConn->Open(“",”“,”“,adConnectUnspecified);打開數(shù)據(jù)庫 //pRst=pConn->Execute(”select * from authors“,NULL,adCmdText);用記錄集查詢數(shù)據(jù)

      //pRst->Open(”select * from authors“,_variant_t((IDispatch*)pConn), // adOpenDynamic,adLockOptimistic,adCmdText);pCmd->put_ActiveConnection(_variant_t((IDispatch*)pConn));pCmd->CommandText=”select * from authors“;用這種方法也可以查詢數(shù)據(jù) pRst=pCmd->Execute(NULL,NULL,adCmdText);while(!pRst->rsEOF)將查詢到的數(shù)據(jù)加到列表框咯。{((CListBox*)GetDlgItem(IDC_LIST1))->AddString((_bstr_t)pRst->GetCollect(”au_lname"));pRst->MoveNext();}

      pRst->Close();pConn->Close();pCmd.Release();pRst.Release();pConn.Release();CoUninitialize();} 至此20課筆記全部記完,關(guān)于數(shù)據(jù)庫的比較簡單些。

      第二篇:孫鑫---VC教學視頻筆記(全)

      第一課

      基礎

      1.MFC生成的C++源文件中都有StdAfx.h,此文件包含了常用的AFX函數(shù)的聲明,其中有afxwin.h,此文件包含了CRECT,CPoint,CWnd等許多類及其方法的聲明。2.Project->Setting->Debug可以加入命令行參數(shù)。

      3.在SDK中要加入“windows.h”和stdio.h。因為LoadCursor,MessageBox等函數(shù)的聲明在這個文件中。

      4.創(chuàng)建一個完整的窗口的四個步驟SDK,1設計窗口類,2注冊窗口類,3創(chuàng)建窗口,4顯示窗口

      5.函數(shù)名可以代表函數(shù)代碼的首地址,即可作為函數(shù)指針。

      6.要查看VC數(shù)據(jù)類型,可以在MSDN中輸入“BOOL”然后選擇“DATA TYPE”。7.atof將字符串轉(zhuǎn)化為float,atoi將字符串轉(zhuǎn)化為int型。8.所有從CWnd類派生的類都有m_hWnd句柄。

      9.變量的生命周期:可以認為出了包含它的大括號,這個變量的生命周期結(jié)束。所以全局變量的聲明位于所有大括號之外。但是用new聲明的變量和用static聲明的變量除外。10.SDK示范程序,見下面。

      11.sprintf格式化字符,其頭文件為stdio.h,在MFC中格式化字符用CString.Format 12.GetDC()與ReleaseDC()要成對使用,否則會內(nèi)存泄漏。同樣,BeginPaint()與EndPaint()。

      13.GetStockObject()得到畫筆、畫刷、字體、調(diào)色板的句柄,使用時必須用類型轉(zhuǎn)換。

      14.什么時候用NULL,什么時候用0.答,對指針賦值時用NULL,對變量賦值時用0.15.什么是野指針?答:將指針指向的變量的內(nèi)存釋放后,此指針即變成野指針!

      第三篇:博士研究生如何做文獻閱讀筆記(總結(jié))

      博士研究生如何做文獻閱讀筆記

      研究生如何有效閱讀文獻

      查閱大量外文文獻,然后從文獻的文獻再去查找,如此往復循環(huán),你的 idea 不知不覺中就被啟發(fā)開來。我們老板說過,看文獻,最重要,最有權(quán)威,也最有深度的是什么,就是你查找的文獻的文獻。

      看文獻中懂得抓重點,找思路。主要是學習別人的 IDEA。也就是看了文獻問幾個問題,文章的技術(shù)突破口在哪里。比如一大堆專利講了很多種分離方法,關(guān)鍵不是看它先做什么后做什么,而是想這個分離方法的依據(jù)是什么,為什么人家會想到這個方法,是不是還有其他方面的物性可以利用為分離的依據(jù)。

      讀論文的時候最有意思的事情是發(fā)現(xiàn)“一稿兩投”。我的意思是不少作者把同一科研數(shù)據(jù)寫成相似主題的不同論文,或是在前面的基礎上又有了新的發(fā)展變化。這時,如果你的課題與此類似,你的好運也就來了。因為能通過深入比較這幾篇文章的異同,發(fā)現(xiàn)作者(或科研小組)對同一組數(shù)據(jù)的不同看法、思路的演變,或者發(fā)現(xiàn)作者本想隱藏的“真正”方法。我就是在分析了同一科研小組的類似實驗后,迅速發(fā)現(xiàn)自己實驗失敗的關(guān)鍵原因,短時間內(nèi)成功完成動物模型制作的,為進一步實驗打下了基礎。

      做技術(shù)的要善于比較和發(fā)現(xiàn),一些技術(shù)含量高文獻,不可能把要點都報道出來,中文如此,英文也是如此。比如一篇專利中有很多的 Sample,而每個的條件或配方都不同,這時要多比較幾個同類文獻,看其共同點在那里。這點在制藥和表面活性劑行業(yè)還是要注意的。

      全面參考國外文獻。一定要清楚,國外文獻也有一些不可信的文章;另外一種現(xiàn)象就是關(guān)于重點的關(guān)鍵的東西他會略去不寫,有時一些細節(jié)的東西他也不會寫的。問題是各人省略的關(guān)鍵和細節(jié)不盡相同,你便從對比中發(fā)現(xiàn)他們研究的脈絡和問題的關(guān)鍵所在。

      單篇文章閱讀順序及側(cè)重

      一篇論文中最重要的部分依次是: 圖表,討論,文字結(jié)果,方法。如在尋找課題階段,重點讀討論和結(jié)論以及展望,在課題設計階段,主要是材料和方法。若只需了解一下該研究的思路,可選取摘要及引文與結(jié)論進行泛讀。個人的經(jīng)驗是盡量去把握作者的研究思路,然后是學習他們的分析方法,最后是學習寫作技巧和寫作語言方式等。

      文獻追蹤的重要性 已定課題的實施

      1、得到一個大概方向。

      2、查相關(guān)中文綜述,查看國內(nèi)有誰或哪個單位在做相關(guān)內(nèi)容。

      3、查外文綜述,比較一下,畢竟外文可能會更詳盡一些,看看大家對什么感興趣。

      4、查較關(guān)鍵的參考文獻,注意雜志和作者的權(quán)威性、引用次數(shù)

      5、重檢相關(guān)全文,注意研究方法、和技術(shù)路線,討論中存在什么問題

      6、根據(jù)本人所能控制的資金和本地技術(shù)資源考慮我能做什么,怎么做

      7、再進一步緊縮范圍,有一個框架圖

      8、根據(jù)框架圖再進一步查外文原文以明細節(jié)。研究生如何進行科技文獻的檢索與分析 SCI檢索

      利用其 Cited References 找到以前的與你想關(guān)的文獻,Times cited,可以找到這項技術(shù)的后續(xù)發(fā)展,而 Find Related Records 則可以找到與你關(guān)心內(nèi)容相關(guān)的一些研究方向,看看,肯定會對你的研究起一個很大的提示。

      這個功能也是幫助使用者 Driving The innovation.專利 重點介紹一些 Derwent 數(shù)據(jù)庫一些很好的特性。這個數(shù)據(jù)庫在 Delphion,WOK(即在 Web of Knowledge 數(shù)據(jù)庫中的 DII),DIALOG(Dialogweb,Dialogone, Dialogclassic),STN(web 和easy),QUESTEL-ORBIT。

      “勤思考:不單單是了解別人做了什么,還要考慮別人沒做什么,或者他的實驗能不能和他的結(jié)論吻合,數(shù)據(jù)可不可靠等等。

      最后,如果覺得該論文確實有價值,返回去通篇精讀。讀論文時要牢記一個問題,“我應該如何利用該論文?”“真的像作者宣稱的那樣么?”“如果??會發(fā)生什么?”。理解論文得到了什么結(jié)論并不等同于理解了該論文。理解論文,就要了解論文的目的,作者所作的選擇(很多都是隱含的),假設和形式化是否可行,論文指出了怎樣的方向,論文所涉及領(lǐng)域都有哪些問題,作者的研究中持續(xù)出現(xiàn)的難點模式是什么,論文所表達的策略觀點是什么,諸如此類?!?/p>

      如在尋找課題階段,重點讀討論和結(jié)論以及展望,在課題設計階段,主要是材料和方法。若只需了解一下該研究的思路,可選取摘要及引文與結(jié)論進行泛讀。

      文章的討論部分真是很重要,如果時間稍微充裕點,建議研讀和模仿牛人paper的討論部分。

      idea創(chuàng)新性以及與舊有的實驗結(jié)果比較的關(guān)鍵部分,可以看出作者設計此實驗的思路,在作出比較以后,對自己的課題會有很大啟發(fā)。”

      “單篇文章閱讀順序及側(cè)重

      1.摘要引文引用的主要信息,研究背景。2.圖表了解主要數(shù)據(jù)和解釋。

      3.討論和結(jié)論 將圖表和結(jié)論聯(lián)系起來,根據(jù)圖表判斷結(jié)論是否恰當。4.結(jié)果詳細閱讀結(jié)果,看數(shù)據(jù)是如何得到的,又是如何分析的。5.材料和方法 詳細閱讀材料和實驗方法,看實驗是如何進行的。6.討論和結(jié)果 進一步掌握論文,注意討論中的關(guān)于從已知的知識和研究如何解釋本文獲得的結(jié)果。另外對于論文中大量的圖表來說,當你能夠重新畫出這張圖,并且能用自己的語言解說這張圖,表明就讀懂了。

      第四篇:VC編程資料總結(jié)

      CString類的完美總結(jié)

      2012-05-04 15:50:50 我來說兩句

      收藏

      我要投稿

      ①、CString 類對象的初始化: CString str;

      CString str1(_T(“abc”));CString str2 = _T(“defg”);

      TCHAR szBuf[] = _T(“kkk”);CString str3(szBuf);CString str4 = szBuf;

      TCHAR *p = _T(“1k2”);//TCHAR * 轉(zhuǎn)換為 CString CString str5(p);CString str6 = p;

      CString str7(str1);CString str8 = str7;

      ②、字符串基本操作: ● 長度:GetLength();CString str(_T(“abc”));

      int len = str.GetLength();//len == 3

      ● 是否為空,即不含字符:IsEmpty();● 清空字符串:Empty();CString str(_T(“abc”));

      BOOL mEmpty = str.IsEmpty();//mEmpty == FALSE str.Empty();

      mEmpty = str.IsEmpty();//mEmpty == TRUE

      ● 轉(zhuǎn)換大小寫:MakeUpper、MakeLower ● 轉(zhuǎn)換順序:MakeReverse CString str(_T(“Abc”));str.MakeUpper();//str == ABC str.MakeLower();//str == abc str.MakeReverse();//str == cba

      ● 字符串的連接:+、+= CString str(_T(“abc”));

      str = _T(“de”)+ str + _T(“kp”);//str == deabckp str += _T(“123”);//str == deabckp123 TCHAR szBuf[] = _T(“789”);

      str += szBuf;//str == deabckp123789

      ● 字符串的比較:==、!=、(<、>、<=、>= 不常用)、Compare(區(qū)分大小寫)、CompareNoCase(不區(qū)分大小寫)

      CString str1(_T(“abc”));CString str2 = _T(“aBc”);if(str1 == str2){

      MessageBox(_T(“str1 等于 str2”));}else{

      MessageBox(_T(“str1 不等于 str2”));}

      ③、字符串的查找:

      Find、ReverseFind、FindOneOf 三個函數(shù)可以實現(xiàn)字符串的查找操作

      Find 從指定位置開始查找指定的字符或者字符串,返回其位置,找不到返回-1;

      舉例:

      CString str(_T(“abcdefg”));

      int idx = str.Find(_T(“cde”), 0);//idx 的值為2;

      ReverseFind 從字符串末尾開始查找指定的字符,返回其位置,找不到返回-1,雖然是從后向前查找,但是位置為從開始算起;

      CString str(_T(“abcdefg”));

      int idx = str.ReverseFind('e');//idx 的值為4;

      FindOneOf 查找參數(shù)中給定字符串中的任意字符,返回第一次出現(xiàn)的位置,找不到返回-1;

      CString str(_T(“abcabcd”));

      int idx = str.FindOneOf(_T(“cbd”));//idx 的值為1;

      ④、字符串的替換與刪除:

      Replace 替換 CString 對象中的指定的字符或者字符串,返回替換的個數(shù),無匹配字符返回 0;

      CString str(_T(“abcdabc”));int num = str.Replace('b', 'k');//str == akcdakc, num == 2

      CString str(_T(“abcdabc”));

      int num = str.Replace(_T(“bc”), _T(“kw”));//str == akwdakw, num == 2

      Remove 刪除 CString 對象中的指定字符,返回刪除字符的個數(shù),有多個時都會刪除;

      CString str(_T(“abcdabcb”));

      int num = str.Remove('b');//str == acdac, num == 3

      Delete 刪除 CString 對象中的指定位置的字符,返回處理后的字符串長度;

      CString str(_T(“abcd”));

      int num = str.Delete(1, 3);//str == a, num == 1

      ⑤、字符串的提?。?/p>

      Left、Mid、Right 三個函數(shù)分別實現(xiàn)從 CString 對象的 左、中、右 進行字符串的提取操作;

      CString str(_T(“abcd”));

      CString strResult = str.Left(2);//strResult == ab strResult = str.Mid(1);//strResult == bcd strResult = str.Mid(0, 2);//strResult == ab strResult = str.Right(2);//strResult == cd

      ⑥、單個字符的修改: GetAt、SetAt 可以獲取與修改 CString 對象中的單個 TCHAR 類型字符;

      操作符也可以獲取 CString 對象中的單個字符,但為只讀的,不能進行修改;

      CString str(_T(“abcd”));

      str.SetAt(0, 'k');//str == kbck TCHAR ch = str.GetAt(2);//ch == c

      ⑦、其他類型與 CString 對象類型的轉(zhuǎn)換:

      ● 格式化字符串:Format 方法,實現(xiàn)從 int、long 等數(shù)值類型、TCHAR、TCHAR * 等類型向 CString 類型的轉(zhuǎn)換;

      int num = 6;CString str;

      str.Format(_T(“%d”), num);

      ● CString 類型向 int 等數(shù)值類型、TCHAR * 類型的轉(zhuǎn)換: TCHAR *pszBuf = str.GetBuffer();str.ReleaseBuffer();

      TCHAR *p =(LPTSTR)(LPCTSTR)str;

      CString str1(_T(“123”));int num = _ttoi(str1);

      ⑧、CString 對象的 Ansi 與 Unicode 轉(zhuǎn)換: 大家可以直接使用上節(jié)課給大家講解的方法,此外這里給大家介紹一種從 Ansi 轉(zhuǎn)換到 Unicode 的隱含方法:

      //當前工程環(huán)境為Unicode CString str;str = “abc”;char *p = “defg”;str = p;

      ⑨、CString 對象字符串所占用的字節(jié)數(shù): CString str = _T(“abc”);

      錯誤的求法:sizeof(CString)、sizeof(str)

      正確的求法:str.GetLength()*sizeof(TCHAR)

      ⑩、當作為 TCHAR * 類型傳參時,確保申請了足夠用的空間,比如使用 GetModuleFileName 函數(shù)

      轉(zhuǎn)載]CString、TCHAR*、char*轉(zhuǎn)換

      [轉(zhuǎn)載]CString、TCHAR*、char*轉(zhuǎn)換 char*、TCHAR*轉(zhuǎn)換CString CString str(****)下面詳細寫一下其它轉(zhuǎn)換

      ////////////////////////////// /* *********************************************************************** * 函數(shù): TransCStringToTCHAR * 描述:將CString 轉(zhuǎn)換為 TCHAR* * 日期:

      *********************************************************************** */ TCHAR* CPublic::CString2TCHAR(CString &str){ int iLen = str.GetLength();TCHAR* szRs = new TCHAR[iLen];lstrcpy(szRs, str.GetBuffer(iLen));str.ReleaseBuffer();return szRs;} /* *********************************************************************** * 函數(shù): TCHAR2Char * 描述:將TCHAR* 轉(zhuǎn)換為 char* * 日期:

      *********************************************************************** */ char* TCHAR2char(TCHAR* tchStr){ int iLen = 2*wcslen(tchStr);//CString,TCHAR漢字算一個字符,因此不用普通計算長度

      char* chRtn = new char[iLen+1] wcstombs(chRtn,tchStr,iLen+1);//轉(zhuǎn)換成功返回為非負值 return chRtn;} /* *********************************************************************** * 函數(shù): char2tchar * 描述:將 char* 轉(zhuǎn)換為 TCHAR* * 日期:

      *********************************************************************** */ TCHAR *char2tchar(char *str){ int iLen = strlen(str);TCHAR *chRtn = new TCHAR[iLen+1];mbstowcs(chRtn, str, iLen+1);return chRtn;} /* *********************************************************************** * 函數(shù): CString2char * 描述:將CString轉(zhuǎn)換為 char* * 日期:

      *********************************************************************** */ char* CPublic::CString2char(CString &str){ int len = str.GetLength();char* chRtn =(char*)malloc((len*2+1)*sizeof(char));//CString的長度中漢字算一個長度

      memset(chRtn, 0, 2*len+1);USES_CONVERSION;strcpy((LPSTR)chRtn,OLE2A(str.LockBuffer()));return chRtn;} //參考

      /////////////////////// //Pocket PC上的UNICODE和ANSI字符串

      //By Vassili Philippov, September 26, 2001.//楊方思歧 譯

      //////////////////////// /* *********************************************************************** * 函 數(shù) 名:GetAnsiString * 描 述:將CString(unicode)轉(zhuǎn)換為char*(ANSI)* 參 數(shù):CString &s 要轉(zhuǎn)換的CString * 返 回 值:返回轉(zhuǎn)換結(jié)果 * 創(chuàng)建日期:

      * 最后修改:

      *********************************************************************** */ char* GetAnsiString(const CString &s){ int nSize = 2*s.GetLength();char *pAnsiString = new char[nSize+1];wcstombs(pAnsiString, s, nSize+1);return pAnsiString;}

      ////////////////////////////////////////////////////////////////////////////////////////////// WideCharToMultiByte和MultiByteToWideChar函數(shù)的用法

      支持Unicode編碼,需要多字節(jié)與寬字節(jié)之間的相互轉(zhuǎn)換

      WideCharToMultiByte的代碼頁用來標記與新轉(zhuǎn)換的字符串相關(guān)的代碼頁。

      MultiByteToWideChar的代碼頁用來標記與一個多字節(jié)字符串相關(guān)的代碼頁。

      常用的代碼頁由CP_ACP和CP_UTF8兩個。

      使用CP_ACP代碼頁就實現(xiàn)了ANSI與Unicode之間的轉(zhuǎn)換。

      使用CP_UTF8代碼頁就實現(xiàn)了UTF-8與Unicode之間的轉(zhuǎn)換。

      wstring AnsiToUnicode((const string& str){ int len = 0;

      len = str.length();

      int unicodeLen = ::MultiByteToWideChar(CP_ACP, 0, str.c_str(),-1,NULL,0);

      wchar_t * pUnicode;

      pUnicode = new wchar_t[unicodeLen+1];

      memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t));

      ::MultiByteToWideChar(CP_ACP,0, str.c_str(),-1,(LPWSTR)pUnicode, unicodeLen);

      wstring rt;rt =(wchar_t*)pUnicode;delete pUnicode;return rt;}

      string UnicodeToAnsi(const wstring& str){

      char* pElementText;int iTextLen;

      // wide char to multi char

      iTextLen = WideCharToMultiByte(CP_ACP, 0, str.c_str(),-1, NULL, 0, NULL, NULL);

      pElementText = new char[iTextLen + 1];

      memset((void*)pElementText, 0, sizeof(char)*(iTextLen + 1));

      ::WideCharToMultiByte(CP_ACP, 0, str.c_str(),-1, pElementText,iTextLen,NULL,NULL);

      string strText;

      strText = pElementText;

      delete[] pElementText;

      return strText;}

      wstring UTF8ToUnicode((const string& str){ int len = 0;

      len = str.length();

      int unicodeLen = ::MultiByteToWideChar(CP_UTF8, 0, str.c_str(),-1,NULL,0);

      wchar_t * pUnicode;

      pUnicode = new wchar_t[unicodeLen+1];

      memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t));

      ::MultiByteToWideChar(CP_UTF8,0, str.c_str(),-1,(LPWSTR)pUnicode, unicodeLen);

      wstring rt;rt =(wchar_t*)pUnicode;delete pUnicode;return rt;}

      string UnicodeToUTF8(const wstring& str){

      char* pElementText;int iTextLen;

      // wide char to multi char

      iTextLen = WideCharToMultiByte(CP_UTF8, 0, str.c_str(),-1, NULL, 0, NULL, NULL);

      pElementText = new char[iTextLen + 1];

      memset((void*)pElementText, 0, sizeof(char)*(iTextLen + 1));

      ::WideCharToMultiByte(CP_UTF8, 0, str.c_str(),-1, pElementText,iTextLen,NULL,NULL);

      string strText;

      strText = pElementText;

      delete[] pElementText;

      return strText;}

      第五篇:讀博士申請書

      尊敬的老師:

      我雖經(jīng)寫過入團、入黨、入伍等多種申請書。然從未像這次這樣莊重,因為這次追求的是內(nèi)在的價值,一旦擁有便永遠擁有。

      今年我已三十有六,似乎不應該與年輕人爭鋒,可我抵御不了讀書的誘惑。記得我在初中畢業(yè)的時候,因家庭困難,母親要我輟學,為此我和母親爭吵過。報考研究生前夕,時任政委亦反復勸阻我,因為當時而臨擴編,我是處長的當然人選,權(quán)衡之后,我還是選擇了讀書。

      為什么要再次做讀書的選擇?有人這樣問我,我也這樣問自己。雖然編一些堂皇的答案并不難,可這不屬于我的性格。那么,是為‘仕’吧?作為一名團職軍官,文憑的分量幾近于零;或者是為名吧?我曾經(jīng)獲得1987年全國報告文學特等獎,優(yōu)秀散文獎,走作家的路似乎更近;要么是為職稱罷?可它對一名行政干部毫無用處。

      無需再做任何設問。我想,如果一定要刨根究底的話,它可能發(fā)源于我對生活的一種體驗。因為我發(fā)現(xiàn),人們看待一個有道德的人,透出的目光是親切,看待一個有權(quán)力的人,透出的目光是敬畏,只有看待一個有知識的人,目光中才盈溢著無限的尊重,并飽含著由衷的敬佩。我向往那份尊重和敬佩。再有,我很欣賞書頁中那一片于喧鬧、復雜和浮噪之中仍可守的寧靜的小天地。

      老師們,敬祈你們體涼我,滿足我也許是奢侈但不失合理的要求:“往上讀。” 寫得真好,讀書在整個社會如果能夠得到這樣的認識,那社會就會發(fā)展進步。可惜,人們往往要經(jīng)過千辛萬苦之后才能明白這一點。

      備注:此選于王滬寧教授著的《政治的人生》原文。

      下載讀博士期間自己總結(jié)的VC筆記word格式文檔
      下載讀博士期間自己總結(jié)的VC筆記.doc
      將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
      點此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔相關(guān)法律責任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進行舉報,并提供相關(guān)證據(jù),工作人員會在5個工作日內(nèi)聯(lián)系你,一經(jīng)查實,本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        總結(jié)讀博士的感受(一)

        國內(nèi)的博士基本還是很辛苦,就我讀的學校來看,基本反映了這個狀況,也許它的要求高點。但是整個年級70多個人,基本都是很辛苦,努力去拼殺和苦熬,多數(shù)同學要延期,一般人其實也難以解釋......

        東農(nóng)博士政治筆記

        第一個問題、科技革命與生產(chǎn)力發(fā)展的關(guān)系 答: 科技是生產(chǎn)力,但不是直接的生產(chǎn)力,當科技發(fā)展成果蘊含在生產(chǎn)力諸要素中,才能變?yōu)楝F(xiàn)實的生產(chǎn)力,物化形態(tài)的生產(chǎn)力,通過教育使勞......

        博士論壇筆記--吳老師

        教學哲學: 經(jīng)濟眼光 策略思考 系統(tǒng)觀念 人生理念 戰(zhàn)勝自然(不虧)戰(zhàn)勝自己 戰(zhàn)勝未來(預期 ) 為什么市場對匯豐不買賬? 匯豐的賬目使投資者不能及時清楚的了解匯豐的潛在風險和價......

        經(jīng)濟法學自己總結(jié)課本筆記

        經(jīng)濟法學3/2 一 經(jīng)濟法的語源 1. 經(jīng)濟法一詞18世紀法國空想共產(chǎn)主義的著名代表之一摩萊里在《自然法典》中首先提出來的,現(xiàn)代經(jīng)濟法始于德國《煤炭經(jīng)濟法》。 2. 我國自197......

        美國留學讀博士選校要點總結(jié)

        WWW.SLL.CN 美國留學讀博士選校要點總結(jié)。去美國留學讀博士是值得鼓勵的事情,那么你在美國讀博士會選擇怎樣的院校-你會根據(jù)哪些條件選擇院校。 美國留學選校對于申請美國留......

        讀博士的心得體會

        讀博士的心得體會(轉(zhuǎn)載) 大家好,突然想寫些東西給準備讀博士的朋友們看看! 現(xiàn)在碩士多了,很多人想讀博士了,但很多人可能根本就不知道博士是怎么一回事就盲目隨從。我覺得首先......

        讀化身博士有感

        讀化身博士有感 從文章的簡介中就吸引了我:可以一下或一天變成另一個人就可以隨心所欲,干什么都可以,沒人會指責你,但是不能太久,不然就會成了別人,再難變回自己,這很危險。 文章中......

        讀畫筆記

        讀畫筆記 何溶 2012-10-9 10:19:10來源:美術(shù) 在總結(jié)三十年來的創(chuàng)作經(jīng)驗和教訓時,我覺得有這樣一個問題值得研究:十九世紀俄羅斯的巡迴展覽畫派非常值得我們借鑒。在文化大革命......