strstrsubstr、AfxGetApp
1.strstr(str1,str2) 函數用于判斷字符串str2是否是str1的子串。如果是,則該函數返回str2在str1中首次出現的地址;否則,返回NULL。
2.substr是C++語言函數,主要功能是復制子字符串,要求從指定位置開始,并具有指定的長度。如果沒有指定長度_Count或_Count+_Off超出了源字符串的長度,則子字符串將延續到源字符串的結尾。
basic_string::substr
basic_string substr(size_type _Off = 0,size_type _Count = npos) const;
參數
_Off
所需的子字符串的起始位置。字符串中第一個字符的索引為 0,默認值為0.
_Count
復制的字符數目
返回值
一個子字符串,從其指定的位置開始
3.AfxGetApp( )是全局的。
AfxGetApp( )這個函數可以得到當前應用進程的指針,是CWinApp類型的,通過這個指針可以訪問到這個進程中的對象。
比如在全局函數中要向對話框中的列表寫數據。
void writeString(char pString)
{
CWnd* pWnd = AfxGetApp()->GetMainWnd();
CMyDlg * pDlg;
pDlg=(CMyDlg ) pWnd;
pDlg->ShowMsg(pString);
}
AfxGetApp()得到進程指針CWinApp,通過這個指針可以得到pWnd。要不在全局函數里你怎么對已存在的對話框操作呢。
AfxGetApp( )這個函數可以得到當前引用的指針CWinApp*,通過這個指針可以訪問到這個進程中的對象。
我們在任何一個VC工程中都會看到一個類似于:
//Test.cpp文件中
CTestApp theApp;(工程名為Test)
的語句。它是指向工程對象的一個指針,你可以用它方向Test工程的成員函數和變量。
如果工程中添加了一個CConfig類,在CConfig中想調用Test工程中的成員函數和變量,則可以這樣調用之:
CTestApp *pApp=(CTestApp *)AfxGetApp( );
如果在CTest類中我們聲明如下一些變量:
//Test.cpp文件
class CTestApp : public CWinApp
{
public:
CTestApp( );
CString str; //添加的對話框變量
…
}
//Test.cpp文件
CTestApp::CTestApp()
{
str=“abc”;
}
好了,現在我們就在CConfig類中調用str吧!
//Config.cpp文件
CTestApp *pApp=(CTestApp *)AfxGetApp( );
AfxMessageBox(pApp->str);
這樣,就實現了對CTestApp類中變量的調用。
afxgetapp – 取應用程序實例指針
getmainwnd – 取主窗口對象指針
這兩個函數可以合成一個: afxgetmainwnd();
我通常把一些重要的工程一開始就需要初始化的并且在其它地方類中都要用到的變量或
函數定義在CApp類中,然通過此函數獲得這些變量或函數。
AfxGetApp
The pointer returned by this function can be used to access application
information such as the main message-dispatch code or the topmost window.
CWinApp AfxGetApp();
Return Value
A pointer to the single CWinApp object for the application.
Example
// Print the application’s executable filename.
TRACE(“Executable filename = %s/n”, AfxGetApp()->m_pszExeName);
Requirements
Windows CE versions: 2.0 and later
Header file: Declared in Afxwin.h
Platform: H/PC Pro, Palms-size PC, Pocket PC
----
如果你定義為取全局變量,只需在需要的地方用extern聲名即可
如果把變量在你的CApp類中定義,就可以通過通過AfxGetApp()獲取CApp的指針,這樣就可以調用它的變量了.如果是全局變量,這不需要用這個函數調用它AfxGetApp()的返回值是指向theApp的指針,與全局變量無關。
AfxGetApp()這個函數在VC當中很常見,主要是用來獲得CWinAPP生成的全局對象的。一般情況下將其強制類型轉換成你自己寫的App類就可以調用里面的方法了。但是如果編寫的是DLL程序的話,情況會稍有不同。你會發現在DLL中調用AfxGetApp這個函數會得到DLL的應用對象。原因出現在DLL的模塊狀態上。應用程序在調用DLL時為了保證資源不出問題,往往會調用一句:
AFX_MANAGE_STATE(AfxGetStaticModuleState())
注意這是一個宏。他的作用是切換模塊的全局變量范圍,即把應用程序的那些全局變量拷貝切換到這個DLL的全局變量拷貝,自然用AfxGetApp得到就是DLL里面的這個APP了。如果向訪問應用程序的App對象,那么只要把模塊狀態切換回去就可以了,記著執行完后一定要把狀態再切換回來啊,否則就要出問題了。
例如:
// switch thread state back to application
_AFX_THREAD_STATE* pState = AfxGetThreadState();
AfxSetModuleState(pState->m_pPrevModuleState);
// do something with the application
AfxGetApp()->…
// switch thread state back to dll
AFX_MANAGE_STATE(AfxGetStaticModuleState())
總結
以上是生活随笔為你收集整理的strstrsubstr、AfxGetApp的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux vi命令的查询,linux
- 下一篇: 内核调试技巧-逆向寻踪,揭开 LACP