有以下功能:
1.發表說說;
2.給好友留言;
3.獲取指定好友的說說;
4.獲取指定好友的日誌(標題);
5.評論指定說說;
6.評論指定日誌;
7.獲取好友最新說說;
8.獲取好友最新日誌(標題)。
這個 DLL 中導出1個類(CQZoneH)和3個信息結構體,我把整個頭文件貼出來:
#ifndef QZONEH_API
#define QZONEH_API _declspec(dllimport)
#else
#pragma warning(disable : 4251)
#endif
#include <afxinet.h>
#define LOGIN_SUCCEED 0 //登錄成功
#define LOGIN_VMISSED 1 //驗證碼錯誤
#define LOGIN_PMISSED 2 //密碼錯誤
#define LOGIN_UNKNOW 3 //未知錯誤
//好友信息結構體
QZONEH_API typedef struct
{
TCHAR szQQ[15]; //QQ號碼
TCHAR szNickName[50]; //暱稱
TCHAR szRemark[50]; //備註
} FRIENDINFO, *PFRIENDINFO, *LPFRIENDINFO;
//說說信息結構體
QZONEH_API typedef struct
{
TCHAR szHostQQ[15]; //主人QQ
TCHAR szContent[300]; //說說內容
TCHAR szTime[25]; //發表時間
time_t lTimeLine; //時間戳
TCHAR szTid[25]; //Topic ID(TID)
} SHUOINFO, *PSHUOINFO, *LPSHUOINFO;
//日誌信息結構體
QZONEH_API typedef struct
{
TCHAR szHostQQ[15]; //主人QQ
TCHAR szSubject[256]; //主題
TCHAR szTime[25]; //發表時間
time_t lTimeLine; //時間戳
TCHAR szBlogId[25]; //ID
} BLOGINFO, *PBLOGINFO, *LPBLOGINFO;
class QZONEH_API CQZoneH
{
public:
CQZoneH();
~CQZoneH();
void SetAccount( LPCTSTR lpszQQ, LPCTSTR lpszPwd ); //設置賬戶
BOOL CheckNeedVerify(); //檢測是否需要驗證碼
HGLOBAL LoadVerify(); //讀取驗證碼
void FreeHGlobal( HGLOBAL hMem ); //釋放內存
void SetVerify( LPCTSTR lpszVer ); //設置驗證碼
UINT Login(); //登錄
BOOL QueryFriendsList(); //請求好友列表
LPFRIENDINFO GetFriendAt( int nIndex ); //得到指定好友信息
int GetFriendsSize(); //得到好友總數
BOOL PublishShuoshuo( LPCTSTR lpszContent,
BOOL bSync = FALSE, BOOL bPrivate = FALSE ); //發說說
BOOL LeaveMessage( LPCTSTR lpszMessage, LPCTSTR lpszTagQQ ); //給指定QQ留言
SHUOINFO* GetShuoshuos( LPCTSTR lpszTagQQ,
const int iStartPos, int& iAmount ); //得到指定QQ和範圍的說說
void ReleaseShuoshuos( SHUOINFO *pShuo ); //釋放說說佔用的內存
BOOL CommentShuoshuo( LPCTSTR lpszTagQQ, LPCTSTR lpszTid,
LPCTSTR lpszText ); //評論指定說說
BOOL CommentShuoshuo( SHUOINFO shuoInfo, LPCTSTR lpszText ); //評論指定說說,重載
BOOL PublishBlog( LPCTSTR lpszSubject, LPCTSTR lpszContent ); //發表日誌
BLOGINFO* GetBlogs( LPCTSTR lpszTagQQ,
const int iStartPos, int& iAmount ); //得到指定QQ和範圍的日誌
void ReleaseBlogs( BLOGINFO *pBlog ); //釋放日誌佔用的內存
BOOL CommentBlog( LPCTSTR lpszTagQQ, LPCTSTR lpszBlogId,
LPCTSTR lpszText ); //評論指定日誌
BOOL CommentBlog( BLOGINFO blogInfo, LPCTSTR lpszText ); //評論指定日誌,重載
SHUOINFO* GetFreshShuoshuos( const int iStartPos,
int& iAmount ); //得到好友最新說說
BLOGINFO* GetFreshBlogs( const int iStartPos,
int& iAmount ); //得到好友最新日誌
HGLOBAL GetHeadImage( LPCTSTR lpszTagQQ, BOOL bBig = TRUE ); //得到指定QQ的jpg格式頭像圖片
void About(); //關於
protected:
CInternetSession *m_pSession;
CString m_strQQ, m_strPwd, m_strVer;
CString m_strGTK;
CPtrArray m_paFriends;
protected:
void UTF8ToGB2312( CString& strTarget );
void GB2312ToUTF8( CString& strTarget );
void SKEYToGTK( CString& strSkey );
CString MakeURLCode( LPCTSTR lpszSource, BOOL bUTF8 );
};
下面是成員函數詳解:
void SetAccount( LPCTSTR lpszQQ, LPCTSTR lpszPwd );
//設置賬戶
//lpszQQ - QQ號碼
//lpszPwd - 密碼
BOOL CheckNeedVerify();
//檢測是需要驗證碼
//返回值 - 需要驗證返回 TRUE,不需要則返回 FLASE
HGLOBAL LoadVerify();
//讀取驗證碼
//返回值 - jpg格式的驗證碼圖片數據
void FreeHGlobal( HGLOBAL hMem );
//釋放內存
//hMem - 內存地址
void SetVerify( LPCTSTR lpszVer );
//設置驗證碼。需要驗證碼的情況下才有必要調用該方法,驗證碼由 LoadVerify 得到,由用戶輸入
//lpszVer - 用戶輸入的驗證碼
UINT Login();
//登錄
//返回值 - 登錄成功返回 LOGIN_SECCEED,驗證碼錯誤返回 LOGIN_VMISSED,密碼錯誤返回 LOGIN_PMISSED,未知錯誤返回 LOGIN_UNKNOW
BOOL QueryFriendsList();
//請求好友列表。請求成後列表存放在內存中
//返回值 - 成功返回 TRUE,否則返回 FALSE
LPFRIENDINFO GetFriendAt( int nIndex );
//通過索引得到指定好用信息
//nIndex - 索引值,從0開始
//返回值 - 返回好友信息結構體指針,請看其定義
int GetFriendsSize();
//得到列表總好友的總數
//返回值 - 返回總數
BOOL PublishShuoshuo( LPCTSTR lpszContent, BOOL bSync = FALSE, BOOL bPrivate = FALSE );
//發表說說
//lpszContent - 說說內容
//bSync - 是否同步到簽名
//bPrivate - 是否爲私密說說(只有自己可見)
//返回值 - 發表成功返回 TRUE,否則爲 FALSE
BOOL LeaveMessage( LPCTSTR lpszMessage, LPCTSTR lpszTagQQ );
//給指定QQ留言
//lpszMessage - 內容
//lpszTagQQ - 目標QQ
//返回值 - 成功返回 TRUE,否則 FALSE
SHUOINFO* GetShuoshuos( LPCTSTR lpszTagQQ, const int iStartPos, int& iAmount );
//得到指定QQ的說說。用完一定要調用 ReleaseShuoshuos 釋放內存,不然會內存溢出
//iStartPos - 指定從第幾條開始,索引爲0
//iAmount - 這個整形引用,指定要獲取的條數,如果說說總數少於其值,則函數返回後 iAmount 的值就是實際數量的值
//返回值 - 說說信息結構體數組的首地址指針,失敗返回 NULL
void ReleaseShuoshuos( SHUOINFO *pShuo );
//釋放說說所佔用的內存
//pShuo - 說說信息結構體數組的首地址指針
BOOL CommentShuoshuo( LPCTSTR lpszTagQQ, LPCTSTR lpszTid, LPCTSTR lpszText );
//評論指定QQ的說說
//lpszTagQQ - 目標QQ
//lpszTid - topic ID,SHUOINFO 的一個成員
//lpszText - 評論內容
//返回值 - 成功返回 TRUE,否則 FALSE
BOOL CommentShuoshuo( SHUOINFO shuoInfo, LPCTSTR lpszText );
//評論指定QQ的說說,重載
//shuoInfo - 說說信息結構體
//lpszText - 評論內容
//返回值 - 成功返回 TRUE,否則 FALSE
BOOL PublishBlog( LPCTSTR lpszSubject, LPCTSTR lpszContent );
//發表日誌
//lpszSubject - 日誌的主題
//lpszContent - 日誌的內容
//返回值 - 發表成功返回 TRUE,失敗返回 FALSE
BLOGINFO* GetBlogs( LPCTSTR lpszTagQQ, const int iStartPos, int& iAmount );
//得到指定QQ的日誌。用完一定要調用 ReleaseBlogs 釋放內存,不然會內存溢出
//iStartPos - 指定從第幾條開始,索引爲0
//iAmount - 這個整形引用,指定要獲取的條數,如果日誌總數少於其值,則函數返回後 iAmount 的值就是實際數量的值
//返回值 - 日誌信息結構體數組的首地址指針,失敗返回 NULL
void ReleaseBlogs( BLOGINFO *pBlog );
//釋放日誌所佔用的內存
//*pBlog - 日誌信息結構體數組的首地址指針
BOOL CommentBlog( LPCTSTR lpszTagQQ, LPCTSTR lpszBlogId, LPCTSTR lpszText );
//評論指定QQ的說說
//lpszTagQQ - 目標QQ
//lpszBlogId - 日誌 ID,BLOGINFO 的一個成員
//lpszText - 評論內容
//返回值 - 成功返回 TRUE,否則 FALSE
BOOL CommentBlog( BLOGINFO blogInfo, LPCTSTR lpszText );
//評論指定QQ的日誌,重載
//blogInfo - 日誌信息結構體
//lpszText - 評論內容
//返回值 - 成功返回 TRUE,否則 FALSE
SHUOINFO* GetFreshShuoshuos( const int iStartPos, int& iAmount );
//得到所有好友最新發表的說說。用完一定要調用 ReleaseShuoshuos 釋放內存,不然會內存溢出
//iStartPos - 指定從第幾條開始,索引爲0
//iAmount - 這個整形引用,指定要獲取的條數,如果日誌總數少於其值,則函數返回後 iAmount 的值就是實際數量的值
//返回值 - 說說信息結構體數組的首地址指針,失敗返回 NULL
BLOGINFO* GetFreshBlogs( const int iStartPos, int& iAmount );
//得到所有好友最新發布的日誌。用完一定要調用 ReleaseBlogs 釋放內存,不然會內存溢出
//iStartPos - 指定從第幾條開始,索引爲0
//iAmount - 這個整形引用,指定要獲取的條數,如果說說總數少於其值,則函數返回後 iAmount 的值就是實際數量的值
//返回值 - 日誌信息結構體數組的首地址指針,失敗返回 NULL
HGLOBAL GetHeadImage( LPCTSTR lpszTagQQ, BOOL bBig = TRUE );
//得到指定QQ的jpg格式頭像圖片數據
//lpszTagQQ - 目標QQ
//bBig - 指定取大圖還是小圖,TRUE 爲大圖,FALSE 爲小圖
void About();
//關於
我現在來舉個登錄的例子:
m_QZone.SetAccount( _T("960632355"), _T("bugaosuni") ); //設置賬戶
if ( m_QZone.CheckNeedVerify() ) //檢測是否需要驗證碼
{
//需要驗證碼
CString strVertify;
HGLOBAL hVerify = m_QZone.LoadVerify(); //讀取驗證碼
//...... //這裏可以通過 GDI+ 啥的顯示驗證碼
//...... //同時得到用戶所輸入的驗證碼
m_QZone.SetVerify( strVerify ); //設置驗證碼
m_QZone.FreeHGlobal( hVerify ); //釋放內存,用在這有點不合理,但是我只是要演示一下
}
//不需要驗證碼可以直接登錄
if ( LOGIN_SUCCEED != m_QZone.Login() ) //驗證登錄是否成功
{
//登錄不成功
//do something...
}
else
{
//登錄成功,獲取好友列表
if( !m_QZone.QueryFriendsList() )
{
//請求獲取列表不成功
}
else
{
LPFRIENDINFO lpInfo = m_QZone.GetFriendAt( 0 ); //獲取第一個好友的信息
//do something...
}
}
資源我已經上傳了,包含成員函數詳解和DLL文件以及lib庫和頭文件,下載地址:http://download.csdn.net/detail/joneeky/4991846
我現在大一,也還有很多不懂,封裝得不好望海涵,並虛心接受指正。以後要堅持寫博客。