本文主要是介绍数据库编程主函数前的代码-------仅记录目的,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
#include <tchar.h>
#include <windows.h>
#include <strsafe.h>#define COM_NO_WINDOWS_H //如果已经包含了Windows.h或不使用其他Windows库函数时
#define DBINITCONSTANTS
#define INITGUID
#define OLEDBVER 0x0260 //为了ICommandStream接口定义为2.6版
#include <oledb.h>
#include <oledberr.h>
#include <msdasc.h>#define GRS_ALLOC(sz) HeapAlloc(GetProcessHeap(),0,sz)
#define GRS_CALLOC(sz) HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sz)
#define GRS_SAFEFREE(p) if(NULL != p){HeapFree(GetProcessHeap(),0,p);p=NULL;}#define GRS_USEPRINTF() TCHAR pBuf[1024] = {}
#define GRS_PRINTF(...) \StringCchPrintf(pBuf,1024,__VA_ARGS__);\WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE),pBuf,lstrlen(pBuf),NULL,NULL);#define GRS_SAFERELEASE(I) if(NULL != I){I->Release();I=NULL;}
#define GRS_COM_CHECK(hr,...) if(FAILED(hr)){GRS_PRINTF(__VA_ARGS__);goto CLEAR_UP;}#define GRS_DEF_INTERFACE(i) i* p##i = NULL;
#define GRS_QUERYINTERFACE(i,iid) \if(FAILED(hr = i->QueryInterface(IID_##iid, (void **)&p##iid)) )\{\GRS_PRINTF(_T("不支持'%s'接口\n"),_T(#iid));\}\else\{\GRS_PRINTF(_T("支持'%s'接口\n"),_T(#iid));\}\GRS_SAFERELEASE(p##iid);
下面的是CLEAR UP定义,放到主函数结束前位置:
int _tmain()
{
...
....
...
CLEAR_UP:GRS_SAFERELEASE(pIOpenRowset);GRS_SAFERELEASE(pIDBCreateCommand);GRS_SAFERELEASE(pICommand);_tsystem(_T("PAUSE"));CoUninitialize();return 0;
}
这篇关于数据库编程主函数前的代码-------仅记录目的的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!