锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 鐢變俊鎭綅浜х敓鍐椾綑浣嶇殑緙栫爜榪囩▼,灝辨槸宸茬煡K(X)姹俁(X)鐨勮繃紼嬨傚湪CRC鐮佷腑鍙互閫氳繃鎵懼埌涓涓壒瀹氱殑r嬈″欏瑰紡G (X)(鍏舵渶楂橀」Xr鐨勭郴鏁版亽涓?),鐒跺悗鐢╔r路K(X)鍘婚櫎浠(X),寰楀埌鐨勪綑寮忓氨鏄疪(X)銆傜壒鍒寮鴻皟鐨勬槸,榪欎簺澶氶」寮忎腑鐨?+"閮芥槸妯?鍔?涔熷嵆寮傛垨榪愮畻);姝ゅ,榪欓噷鐨勯櫎娉曠敤鐨勪篃鏄ā2闄ゆ硶,鍗抽櫎娉曡繃紼嬩腑鐢ㄥ埌鐨勫噺娉曟槸妯?鍑忔硶,瀹冨拰妯?鍔犳硶鐨勮繍綆楄鍒欎竴鏍?閮芥槸寮傛垨榪愮畻,榪欐槸涓縐嶄笉鑰冭檻鍔犳硶榪涗綅鍜屽噺娉曞熶綅鐨勮繍綆?鍗?/p> 0+O=0,0+1=1,1+0=1,1+1=0 鍦ㄨ繘琛屽熀浜庢ā2榪愮畻鐨勫欏瑰紡闄ゆ硶鏃?鍙閮ㄥ垎浣欐暟棣栦綅涓?,渚垮彲涓婂晢1,鍚﹀垯涓婂晢0銆傜劧鍚庢寜妯?鍑忔硶姹傚緱浣欐暟,璇ヤ綑鏁頒笉璁℃渶楂樹綅銆傚綋琚櫎鏁伴愪綅闄ゅ畬鏃?鏈鍚庡緱鍒版瘮闄ゆ暟灝戜竴浣嶇殑浣欐暟銆傛浣欐暟鍗充負鍐椾綑浣?灝嗗叾娣誨姞鍦ㄤ俊鎭綅鍚庝究鏋勬垚CRC鐮佸瓧銆?br /> 浠嶄互涓婁緥涓璌(X)=X6+X4+X3+1涓轟緥(鍗充俊鎭綅涓?011001),鑻(X)=X4+X3+1 [Xr-K(X)+R(X)]/G(X)=Q(X) 鍗? T(X)/G(X)=Q(X) 鐢辨鍙,淇¢亾涓婂彂閫佺殑鐮佸瓧澶氶」寮廡(X)=Xr-K(X)+R(X)銆傝嫢浼犺緭榪囩▼鏃犻敊錛屽垯鎺ユ敹鏂規(guī)敹鍒扮殑鐮佸瓧涔熷搴斾簬姝ゅ欏瑰紡,涔熷嵆鎺ユ敹鍒扮殑鐮佸瓧澶氶」寮忚兘琚獹(X)鏁撮櫎銆傚洜鑰屾帴鏀剁鐨勬牎楠岃繃紼嬪氨鏄皢鎺ユ敹鍒扮殑鐮佸瓧澶氶」寮忛櫎浠(X)鐨勮繃紼嬨傝嫢浣欏紡涓洪浂鍒欒涓轟紶杈撳厓宸敊;鑻ヤ綑寮忎笉涓洪浂鍒欎紶杈撴湁宸敊銆?/p> 渚嬪,鍓嶈堪渚嬪瓙涓嫢鐮佸瓧10110011010緇忎紶杈撳悗鐢變簬鍙楀櫔澹扮殑騫叉壈,鍦ㄦ帴鏀剁鍙樻垚涓?0110011100,鍒欐眰浣欏紡鐨勯櫎娉曞涓? 鐞嗚涓婂彲浠ヨ瘉鏄庡驚鐜啑浣欐牎楠岀爜鐨勬閿欒兘鍔涙湁浠ヤ笅鐗圭偣: Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=582980 1錛屾秷鎭搷搴斿嚱鏁幫細錛堜緥錛氬湪CDrawView綾誨搷搴旈紶鏍囧乏閿寜涓嬫秷鎭級 榪欎釜娉ㄩ噴瀹忎負鐨勬槸璁〤lassWizard鑳藉鍒嗚鯨鍑哄摢浜涗唬鐮佹槸瀹冪敓鎴愮殑錛屽摢浜涙槸浣犺嚜宸卞啓鐨勩?br />浣犺嚜宸卞啓鐨勪唬鐮佽鍦ㄨ繖涓敞閲婁箣澶栵紝榪欐牱ClassWizard鍐嶄慨鏀規(guī)秷鎭槧灝勭殑鏃跺欏氨涓嶄細綆′綘鐨勪唬鐮佷簡銆?br />闄愪簬浠ュ墠鐨勭‖浠墮熷害錛孋lassWizard姣旇緝鍌誨啋錛屾墍浠ラ渶瑕佽繖浜涙敞閲婂畯鏉ュ畾浣嶃備粠7.0寮濮嬶紝灝變笉鍐嶉渶 2錛夊湪婧愭枃浠訛紙DrawView.cpp)涓繘琛屾秷鎭槧灝勩?br />BEGIN_MESSAGE_MAP(CDrawView, CView) 2錛屾秷鎭搷搴旂殑鏂瑰紡錛?br />1錛?
鍦ㄥ熀綾諱腑閽堝姣忕娑堟伅鍋氫竴涓櫄鍑芥暟錛屽綋瀛愮被瀵規(guī)秷鎭搷搴旀椂鍊欙紝鍙鍦ㄥ瓙綾諱腑閲嶅啓榪欎釜铏氬嚱鏁板嵆鍙傜己鐐癸細MFC綾繪淳鐢熷眰嬈″緢澶氾紝濡傛灉鍦ㄥ熀綾誨姣忎釜娑堟伅榪涜铏氬嚱
鏁板鐞嗭紝閭d箞浠庡熀綾繪淳鐢熺殑姣忎釜瀛愮被閮藉皢鑳岃礋涓涓簽澶х殑铏氳〃錛岃繖鏍鋒氮璐瑰唴瀛橈紝鏁匨FC娌℃湁閲囧彇榪欎腑鏂瑰紡鑰岄噰鍙栨秷鎭槧灝勬柟寮忋?br />2錛夋秷鎭槧灝勬柟寮忥細
MFC鍦ㄥ悗鍙扮淮鎶や簡涓涓彞鏌勫拰C++瀵硅薄鎸囬拡瀵圭収琛紝褰撴敹鍒頒竴涓秷鎭悗錛岄氳繃娑堟伅緇撴瀯閲岃祫婧愬彞鏌勶紙鏌ュ鐓ц〃錛夊氨鍙壘鍒頒笌瀹冨搴旂殑涓涓狢++瀵硅薄鎸囬拡錛岀劧鍚?
鎶婅繖涓寚閽堜紶緇欏熀綾伙紝鍩虹被鍒╃敤榪欎釜鎸囬拡璋冪敤WindowProc()鍑芥暟瀵規(guī)秷鎭繘琛屽鐞嗭紝WindowProc()鍑芥暟涓皟鐢∣nWndMsg()鍑芥暟錛?
鐪熸鐨勬秷鎭礬鐢卞強澶勭悊鏄敱O(jiān)nWndMsg()鍑芥暟瀹屾垚鐨勩傜敱浜嶹indowProc()鍜孫nWndMsg()閮芥槸铏氬嚱鏁幫紝鑰屼笖鏄敤媧劇敓綾誨璞℃寚閽堣皟鐢?
鐨勶紝鐢卞鎬佹х煡鏈鎬葷粓璋冪敤瀛愮被鐨勩傚湪OnWndMsg()鍑芥暟澶勭悊鐨勬椂鍊欙紝鏍規(guī)嵁娑堟伅縐嶇被鍘繪煡鎵炬秷鎭槧灝勶紝鍒ゆ柇鎵鍙戠殑娑堟伅鏈夋病鏈夊搷搴斿嚱鏁幫紝鍏蜂綋鏂瑰紡鏄埌鐩稿叧
鐨勫ご鏂囦歡鍜屾簮鏂囦歡涓鎵炬秷鎭搷搴斿嚱鏁板0鏄庯紙浠庢敞閲婂畯//}AFX_MSG涔嬮棿瀵繪壘錛夛紝娑堟伅鏄犲皠錛堜粠瀹廈EGIN_MESSAGE_MAP(...)....END_MESSAGE_MAP()涔嬮棿瀵繪壘錛夛紝鏈緇堟壘鍒板搴旂殑娑堟伅澶勭悊鍑芥暟銆傚綋鐒訛紝濡傛灉瀛愮被涓病鏈夊娑堟伅榪涜澶勭悊錛屽垯娑堟伅浜ょ敱鍩虹被澶勭悊銆?br />璇存槑錛?br />virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam); wxWidgets鐨勬枃妗d腑閮芥槸浣跨敤鍦ㄦ帶鍒墮潰鏉?鏁版嵁婧愪腑璁懼畾DSN鏉ュ垱寤篛DBC榪炴帴銆備絾鏄疄闄呬笂寰堝灝忓瀷鐨勫簲鐢紝鍙槸浣跨敤鏈満鐨勪竴涓狝ccess鏁版嵁搴撱傝岃姹備嬌鐢ㄨ呭涔燨DBC鐨凞SN閰嶇疆鏄庢樉鐨勫鍔犱簡杞歡鐨勪嬌鐢ㄩ毦搴︺傚洜姝わ紝鐮旂┒浜嗕竴涓媤xforum.org涓殑甯栧瓙錛岃瘯楠屾垚鍔燂紒鑼冧緥濡備笅錛?/p>
wxDbConnectInf *DbConnectInf = NULL; // 瀹氫箟鏁版嵁搴撹繛鎺ヤ俊鎭寚閽圖B connection information DbConnectInf = new wxDbConnectInf(0, wxT(""), wxT(""), wxT(""));//榪欓噷瀹氫箟鐨勫唴瀹瑰熀鏈病鐢紝浣嗕笉瀹氫箟浼氭姤閿?/p>
PodDB = new wxDb(DbConnectInf->GetHenv()); bool DBfailOnDataTypeUnsupported=!true;// //灝嗗瓨鏀炬彁鍙栨暟鎹殑鍙橀噺娓呯┖ //瀹氫箟鍒楃殑鏁版嵁鏍煎紡錛屽拰鍙栧嚭鐨勬牸寮忋?br />//姝ゅ闇瑕佹敞鎰忕殑鏄鏋滃墠闈㈡寚鏄庝簡numTableColumns涓簄鐨勮瘽錛屽氨涓瀹氳瀹氫箟n鏉?br />table->SetColDefs(0, wxT("Pod_Title"), DB_DATA_TYPE_VARCHAR, pPodPictureInfo->Title, SQL_C_WXCHAR, sizeof(pPodPictureInfo->Title), true, true); //鎵撳紑琛?br />if (!table->Open()) //闄愬畾鍙栧嚭Pod_When鍒楀間負1982鐨勮(row) //鎸夌収PodDate瀛楁鎺掑簭 //鏍規(guī)嵁涓婇潰鐨勯檺瀹氫俊鎭墽琛屾煡璇㈡搷浣?br />if (!table->Query()) while (table->GetNext())//鎻愬彇鏌ヨ鍒扮殑琛?br />{
鍦⊿etColDefs涓叧鑱旂殑鍙橀噺涓嶈兘浣跨敤wxString錛屽彧鑳戒嬌鐢╳xChar[n]絳夋牸寮忋?/p>
}

0-0=0,0-1=1,1-0=1,1-1=0
(瀵瑰簲浠g爜11001),鍙杛=4,鍒橷4路K(X)=X10+X8+X7+X4(瀵瑰簲浠g爜涓?110010000),鍏剁敱妯?闄ゆ硶姹備綑寮廟(X)鐨勮繃紼嬫墍紺哄涓?
寰楀埌鐨勬渶鍚庝綑鏁頒負1010,榪欏氨鏄啑浣欎綅,瀵瑰簲R(X)=X3+X銆?br /> 鐢變簬R(X)鏄疿r路K(X)闄や互G(X)鐨勪綑寮?閭d箞涓嬪垪鍏崇郴寮忓繀鐒舵弧瓚?br /> Xr路K(X)=G(X)Q(X)+R(X)
鍏朵腑Q(X)涓哄晢寮忋傛牴鎹ā浜岃繍綆楄鍒橰(X)+R(X)=0鐨勭壒鐐?鍙皢涓婂紡鏀硅涓?/p>
姹傚緱鐨勪綑寮忎笉涓洪浂,鐩稿綋浜庡湪鐮佸瓧涓婇潰鍗婂姞涓婁簡宸敊妯″紡00000000110銆傚樊閿欐ā寮忓搴旂殑澶氶」寮忚涓篍(X),涓婁緥涓璄(X)=X2+X銆傛湁宸敊鏃?鎺ユ敹绔敹鍒扮殑涓嶅啀鏄疶(X),鑰屾槸T(X)涓嶦(X)涔嬫ā浜屽姞,鍗?br /> [T(X)+E(X)]/G(X)=T(X)/G(X)+E(X)/G(X)
鑻(X)/G(X)=0,鍒欒繖縐嶅樊閿欏氨鑳芥嫻嬪嚭鏉?鑻(X)/G(X)=0,閭d箞鐢變簬鎺ユ敹鍒扮殑鐮佸瓧澶氶」寮忎粛鐒跺彲琚獹(X)鏁撮櫎,閿欒灝辨嫻嬩笉鍑烘潵,涔熷嵆鍙戠敓浜嗘紡媯銆?/p>
(1)鍙嫻嬪嚭鎵鏈夊鏁頒綅閿欍?br /> (2)鍙嫻嬪嚭鎵鏈夊弻姣旂壒鐨勯敊銆?br /> (3)鍙嫻嬪嚭鎵鏈夊皬浜庛佺瓑浜庢牎楠屼綅闀垮害鐨勭獊鍙戦敊銆?/p>
]]>
2>鍦板潃鍊鹼紝鍗沖瓨鍌ㄦ暟鎹肩殑閭e潡鍐呭瓨鍦板潃錛屼篃縐板乏鍊鹼紙lvalue錛夛紝鏂囧瓧甯擱噺涓嶈兘琚敤浣滃乏鍊箋?
2 . 闂
緇欒〃杈懼紡鍔犱笂鎷彿錛?br /> ++a--
緇撴灉 ++(a--)
榪欎釜琛ㄨ揪寮忔槸闈炴硶鐨勶紝鍥犱負鍓嶅閲忔搷浣滆姹備竴涓彲淇敼鐨勫乏鍊鹼紝鑰?"a--" 涓嶆槸宸﹀鹼紙鍗沖彸鍊鹼級
3 . 鍓嶅閲忓拰鍚庡閲忕殑鍖哄埆
鏃╂湡鐨刢璇█鏁欐潗錛宖or寰幆璇彞閫氬父鍐欐垚錛?br />for(int i=0;i<10;i++)
鑰岀幇鍦ㄥ涓猴細
for(int i=0;i<10;++i)
涓よ呮湁鍖哄埆鍚楋紵
a++ 鍗蟲槸榪斿洖 a鐨勫鹼紝鐒跺悗鍙橀噺 a 鍔?1錛岃繑鍥為渶瑕佷駭鐢熶竴涓復鏃跺彉閲忕被浼間簬
{
int temp = a;
a=a+1;
return temp; //榪斿洖鍙沖?
}
++a 鍒欎負錛?
{
a=a+1;
return &a; //榪斿洖宸﹀?
}
鏄劇劧錛屽墠澧為噺涓嶉渶瑕佷腑闂村彉閲忥紝鏁堢巼鏇撮珮銆?
]]>
鏉ユ簮涓:Using typedef to Curb Miscreant Code
Typedef 澹版槑鏈夊姪浜庡垱寤哄鉤鍙版棤鍏崇被鍨嬶紝鐢氳嚦鑳介殣钘忓鏉傚拰闅句互鐞嗚В鐨勮娉曘備笉綆℃庢牱錛屼嬌鐢?typedef 鑳戒負浠g爜甯︽潵鎰忔兂涓嶅埌鐨勫ソ澶勶紝閫氳繃鏈枃浣犲彲浠ュ涔犵敤 typedef 閬垮厤緙烘瑺錛屼粠鑰屼嬌浠g爜鏇村仴澹?br />typedef 澹版槑錛岀畝縐?typedef錛屼負鐜版湁綾誨瀷鍒涘緩涓涓柊鐨勫悕瀛椼傛瘮濡備漢浠父甯鎬嬌鐢?typedef 鏉ョ紪鍐欐洿緹庤鍜屽彲璇葷殑浠g爜銆傛墍璋撶編瑙傦紝鎰忔寚 typedef 鑳介殣钘忕鎷欑殑璇硶鏋勯犱互鍙婂鉤鍙扮浉鍏崇殑鏁版嵁綾誨瀷錛屼粠鑰屽寮哄彲縐繪鎬у拰浠ュ強鏈潵鐨勫彲緇存姢鎬с傛湰鏂囦笅闈㈠皢绔敖鍏ㄥ姏鏉ユ彮紺?typedef 寮哄ぇ鍔熻兘浠ュ強濡備綍閬垮厤涓浜涘父瑙佺殑闄烽槺銆?br />濡備綍鍒涘緩騫沖彴鏃犲叧鐨勬暟鎹被鍨嬶紝闅愯棌絎ㄦ嫏涓旈毦浠ョ悊瑙g殑璇硶?
浣跨敤 typedefs 涓虹幇鏈夌被鍨嬪垱寤哄悓涔夊瓧銆?br />瀹氫箟鏄撲簬璁板繂鐨勭被鍨嬪悕
銆銆typedef 浣跨敤鏈澶氱殑鍦版柟鏄垱寤烘槗浜庤蹇嗙殑綾誨瀷鍚嶏紝鐢ㄥ畠鏉ュ綊妗g▼搴忓憳鐨勬剰鍥俱傜被鍨嬪嚭鐜板湪鎵澹版槑鐨勫彉閲忓悕瀛椾腑錛屼綅浜?''typedef'' 鍏抽敭瀛楀彸杈廣備緥濡傦細
typedef int size;
銆銆姝ゅ0鏄庡畾涔変簡涓涓?int 鐨勫悓涔夊瓧錛屽悕瀛椾負 size銆傛敞鎰?typedef 騫朵笉鍒涘緩鏂扮殑綾誨瀷銆傚畠浠呬粎涓虹幇鏈夌被鍨嬫坊鍔犱竴涓悓涔夊瓧銆備綘鍙互鍦ㄤ換浣曢渶瑕?int 鐨勪笂涓嬫枃涓嬌鐢?size錛?br />void measure(size * psz);
size array[4];
size len = file.getlength();
std::vector vs;
銆銆typedef 榪樺彲浠ユ帺楗扮鍚堢被鍨嬶紝濡傛寚閽堝拰鏁扮粍銆備緥濡傦紝浣犱笉鐢ㄨ薄涓嬮潰榪欐牱閲嶅瀹氫箟鏈?81 涓瓧絎﹀厓绱犵殑鏁扮粍錛?br />char line[81];
char text[81];
瀹氫箟涓涓?typedef錛屾瘡褰撹鐢ㄥ埌鐩稿悓綾誨瀷鍜屽ぇ灝忕殑鏁扮粍鏃訛紝鍙互榪欐牱錛?br />typedef char Line[81];
Line text, secondline;
getline(text);
鍚屾牱錛屽彲浠ヨ薄涓嬮潰榪欐牱闅愯棌鎸囬拡璇硶錛?br />typedef char * pstr;
int mystrcmp(pstr, pstr);
銆銆榪欓噷灝嗗甫鎴戜滑鍒拌揪絎竴涓?typedef 闄烽槺銆傛爣鍑嗗嚱鏁?strcmp()鏈変袱涓榗onst char *'綾誨瀷鐨勫弬鏁般傚洜姝わ紝瀹冨彲鑳戒細璇浜轟滑璞′笅闈㈣繖鏍峰0鏄?mystrcmp()錛?br />int mystrcmp(const pstr, const pstr);
銆銆榪欐槸閿欒鐨勶紝鎸夌収欏哄簭錛屸榗onst pstr'琚В閲婁負鈥榗har * const'錛堜竴涓寚鍚?char 鐨勫父閲忔寚閽堬級錛岃屼笉鏄榗onst char *'錛堟寚鍚戝父閲?char 鐨勬寚閽堬級銆傝繖涓棶棰樺緢瀹規(guī)槗瑙e喅錛?br />typedef const char * cpstr;
int mystrcmp(cpstr, cpstr); // 鐜板湪鏄紜殑
璁頒綇錛氫笉綆′粈涔堟椂鍊欙紝鍙涓烘寚閽堝0鏄?typedef錛岄偅涔堥兘瑕佸湪鏈緇堢殑 typedef 鍚嶇О涓姞涓涓?const錛屼互浣垮緱璇ユ寚閽堟湰韜槸甯擱噺錛岃屼笉鏄璞°?br />浠g爜綆鍖?br />銆銆涓婇潰璁ㄨ鐨?typedef 琛屼負鏈夌偣鍍?#define 瀹忥紝鐢ㄥ叾瀹為檯綾誨瀷鏇夸唬鍚屼箟瀛椼備笉鍚岀偣鏄?typedef 鍦ㄧ紪璇戞椂琚В閲婏紝鍥犳璁╃紪璇戝櫒鏉ュ簲浠樿秴瓚婇澶勭悊鍣ㄨ兘鍔涚殑鏂囨湰鏇挎崲銆備緥濡傦細
typedef int (*PF) (const char *, const char *);
銆銆榪欎釜澹版槑寮曞叆浜?PF 綾誨瀷浣滀負鍑芥暟鎸囬拡鐨勫悓涔夊瓧錛岃鍑芥暟鏈変袱涓?const char * 綾誨瀷鐨勫弬鏁頒互鍙婁竴涓?int 綾誨瀷鐨勮繑鍥炲箋傚鏋滆浣跨敤涓嬪垪褰㈠紡鐨勫嚱鏁板0鏄庯紝閭d箞涓婅堪榪欎釜 typedef 鏄笉鍙垨緙虹殑錛?br />PF Register(PF pf);
銆銆Register() 鐨勫弬鏁版槸涓涓?PF 綾誨瀷鐨勫洖璋冨嚱鏁幫紝榪斿洖鏌愪釜鍑芥暟鐨勫湴鍧錛屽叾緗插悕涓庡厛鍓嶆敞鍐岀殑鍚嶅瓧鐩稿悓銆傚仛涓嬈℃繁鍛煎惛銆備笅闈㈡垜灞曠ず涓涓嬪鏋滀笉鐢?typedef錛屾垜浠槸濡備綍瀹炵幇榪欎釜澹版槑鐨勶細
int (*Register (int (*pf)(const char *, const char *)))
(const char *, const char *);
銆銆寰堝皯鏈夌▼搴忓憳鐞嗚В瀹冩槸浠涔堟剰鎬濓紝鏇翠笉鐢ㄨ榪欑璐硅В鐨勪唬鐮佹墍甯︽潵鐨勫嚭閿欓闄╀簡銆傛樉鐒訛紝榪欓噷浣跨敤 typedef 涓嶆槸涓縐嶇壒鏉冿紝鑰屾槸涓縐嶅繀闇銆傛寔鎬鐤戞佸害鐨勪漢鍙兘浼氶棶錛?OK錛屾湁浜鴻繕浼氬啓榪欐牱鐨勪唬鐮佸悧錛?錛屽揩閫熸祻瑙堜竴涓嬫彮紺?signal()鍑芥暟鐨勫ご鏂囦歡 錛屼竴涓湁鍚屾牱鎺ュ彛鐨勫嚱鏁般?br />typedef 鍜屽瓨鍌ㄧ被鍏抽敭瀛楋紙storage class specifier錛?br />銆銆榪欑璇存硶鏄笉鏄湁鐐逛護浜烘儕璁訛紝typedef 灝卞儚 auto錛宔xtern錛宮utable錛宻tatic錛屽拰 register 涓鏍鳳紝鏄竴涓瓨鍌ㄧ被鍏抽敭瀛椼傝繖騫舵槸璇?typedef 浼氱湡姝e獎鍝嶅璞$殑瀛樺偍鐗規(guī)э紱瀹冨彧鏄鍦ㄨ鍙ユ瀯鎴愪笂錛宼ypedef 澹版槑鐪嬭搗鏉ヨ薄 static錛宔xtern 絳夌被鍨嬬殑鍙橀噺澹版槑銆備笅闈㈠皢甯﹀埌絎簩涓櫡闃憋細
typedef register int FAST_COUNTER; // 閿欒
銆銆緙栬瘧閫氫笉榪囥傞棶棰樺嚭鍦ㄤ綘涓嶈兘鍦ㄥ0鏄庝腑鏈夊涓瓨鍌ㄧ被鍏抽敭瀛椼傚洜涓虹鍙?typedef 宸茬粡鍗犳嵁浜嗗瓨鍌ㄧ被鍏抽敭瀛楃殑浣嶇疆錛屽湪 typedef 澹版槑涓笉鑳界敤 register錛堟垨浠諱綍鍏跺畠瀛樺偍綾誨叧閿瓧錛夈?br />淇冭繘璺ㄥ鉤鍙板紑鍙?br />銆銆typedef 鏈夊彟澶栦竴涓噸瑕佺殑鐢ㄩ旓紝閭e氨鏄畾涔夋満鍣ㄦ棤鍏崇殑綾誨瀷錛屼緥濡傦紝浣犲彲浠ュ畾涔変竴涓彨 REAL 鐨勬誕鐐圭被鍨嬶紝鍦ㄧ洰鏍囨満鍣ㄤ笂瀹冨彲浠鑾峰緱鏈楂樼殑綺懼害錛?br />typedef long double REAL;
鍦ㄤ笉鏀寔 long double 鐨勬満鍣ㄤ笂錛岃 typedef 鐪嬭搗鏉ヤ細鏄笅闈㈣繖鏍鳳細
typedef double REAL;
騫朵笖錛屽湪榪?double 閮戒笉鏀寔鐨勬満鍣ㄤ笂錛岃 typedef 鐪嬭搗鏉ヤ細鏄繖鏍鳳細銆?br />typedef float REAL;
銆 銆浣犱笉鐢ㄥ婧愪唬鐮佸仛浠諱綍淇敼錛屼究鍙互鍦ㄦ瘡涓縐嶅鉤鍙頒笂緙栬瘧榪欎釜浣跨敤 REAL 綾誨瀷鐨勫簲鐢ㄧ▼搴忋傚敮涓瑕佹敼鐨勬槸 typedef 鏈韓銆傚湪澶у鏁版儏鍐典笅錛岀敋鑷寵繖涓井灝忕殑鍙樺姩瀹屽叏閮藉彲浠ラ氳繃濂囧鐨勬潯浠剁紪璇戞潵鑷姩瀹炵幇銆備笉鏄悧? 鏍囧噯搴撳箍娉涘湴浣跨敤 typedef 鏉ュ垱寤鴻繖鏍風殑騫沖彴鏃犲叧綾誨瀷錛歴ize_t錛宲trdiff 鍜?fpos_t 灝辨槸鍏朵腑鐨勪緥瀛愩傛澶栵紝璞?std::string 鍜?std::ofstream 榪欐牱鐨?typedef 榪橀殣钘忎簡闀塊暱鐨勶紝闅句互鐞嗚В鐨勬ā鏉跨壒鍖栬娉曪紝渚嬪錛歜asic_string錛宎llocator> 鍜?basic_ofstream>銆?br />浣滆呯畝浠?br />銆銆Danny Kalev 鏄竴鍚嶉氳繃璁よ瘉鐨勭郴緇熷垎鏋愬笀錛屼笓鏀?C++ 鍜屽艦寮忚璦鐞嗚鐨勮蔣浠跺伐紼嬪笀銆?997 騫村埌 2000 騫存湡闂達紝浠栨槸 C++ 鏍囧噯濮斿憳浼氭垚鍛樸傛渶榪戜粬浠ヤ紭寮傛垚緇╁畬鎴愪簡浠栧湪鏅氳璦瀛︾爺絀舵柟闈㈢殑紜曞+璁烘枃銆備笟浣欐椂闂翠粬鍠滄鍚彜鍏擱煶涔愶紝闃呰緇村鍒╀簹鏃舵湡鐨勬枃瀛︿綔鍝侊紝鐮旂┒ Hittite銆丅asque 鍜?Irish Gaelic 榪欐牱鐨勮嚜鐒惰璦銆傚叾瀹冨叴瓚e寘鎷冨彜鍜屽湴鐞嗐侱anny 鏃跺父鍒頒竴浜?C++ 璁哄潧騫跺畾鏈熶負涓嶅悓鐨?C++ 緗戠珯鍜屾潅蹇楁挵鍐欐枃绔犮備粬榪樺湪鏁欒偛鏈烘瀯璁叉巿紼嬪簭璁捐璇█鍜屽簲鐢ㄨ璦璇劇▼銆?br />鏉ユ簮浜岋細(http://www.ccfans.net/bbs/dispbbs.asp?boardid=30&;id=4455)
C璇█涓璽ypedef鐢ㄦ硶
1. 鍩烘湰瑙i噴
銆銆typedef涓篊璇█鐨勫叧閿瓧錛屼綔鐢ㄦ槸涓轟竴縐嶆暟鎹被鍨嬪畾涔変竴涓柊鍚嶅瓧銆傝繖閲岀殑鏁版嵁綾誨瀷鍖呮嫭鍐呴儴鏁版嵁綾誨瀷錛坕nt,char絳夛級鍜岃嚜瀹氫箟鐨勬暟鎹被鍨嬶紙struct絳夛級銆?br />銆銆鍦ㄧ紪紼嬩腑浣跨敤typedef鐩殑涓鑸湁涓や釜錛屼竴涓槸緇欏彉閲忎竴涓槗璁頒笖鎰忎箟鏄庣‘鐨勬柊鍚嶅瓧錛屽彟涓涓槸綆鍖栦竴浜涙瘮杈冨鏉傜殑綾誨瀷澹版槑銆?br />銆銆鑷充簬typedef鏈変粈涔堝井濡欎箣澶勶紝璇蜂綘鎺ョ潃鐪嬩笅闈㈠鍑犱釜闂鐨勫叿浣撻槓榪般?br />銆2. typedef & 緇撴瀯鐨勯棶棰?br />銆銆褰撶敤涓嬮潰鐨勪唬鐮佸畾涔変竴涓粨鏋勬椂錛岀紪璇戝櫒鎶ヤ簡涓涓敊璇紝涓轟粈涔堝憿錛熻帿闈濩璇█涓嶅厑璁稿湪緇撴瀯涓寘鍚寚鍚戝畠鑷繁鐨勬寚閽堝悧錛熻浣犲厛鐚滄兂涓涓嬶紝鐒跺悗鐪嬩笅鏂囪鏄庯細
typedef struct tagNode
{
銆char *pItem;
銆pNode pNext;
} *pNode;
銆銆絳旀涓庡垎鏋愶細
銆銆1銆乼ypedef鐨勬渶綆鍗曚嬌鐢?br />typedef long byte_4;
銆銆緇欏凡鐭ユ暟鎹被鍨媗ong璧蜂釜鏂板悕瀛楋紝鍙玝yte_4銆?br />銆銆2銆?typedef涓庣粨鏋勭粨鍚堜嬌鐢?br />typedef struct tagMyStruct
{
銆int iNum;
銆long lLength;
} MyStruct;
銆銆榪欒鍙ュ疄闄呬笂瀹屾垚涓や釜鎿嶄綔錛?br />銆銆1) 瀹氫箟涓涓柊鐨勭粨鏋勭被鍨?br />struct tagMyStruct
{
銆int iNum;
銆long lLength;
};
銆銆鍒嗘瀽錛歵agMyStruct縐頒負鈥渢ag鈥濓紝鍗斥滄爣絳鋸濓紝瀹為檯涓婃槸涓涓復鏃跺悕瀛楋紝struct 鍏抽敭瀛楀拰tagMyStruct涓璧鳳紝鏋勬垚浜嗚繖涓粨鏋勭被鍨嬶紝涓嶈鏄惁鏈塼ypedef錛岃繖涓粨鏋勯兘瀛樺湪銆?br />銆銆鎴戜滑鍙互鐢╯truct tagMyStruct varName鏉ュ畾涔夊彉閲忥紝浣嗚娉ㄦ剰錛屼嬌鐢╰agMyStruct varName鏉ュ畾涔夊彉閲忔槸涓嶅鐨勶紝鍥犱負struct 鍜宼agMyStruct鍚堝湪涓璧鋒墠鑳借〃紺轟竴涓粨鏋勭被鍨嬨?br />銆銆2) typedef涓鴻繖涓柊鐨勭粨鏋勮搗浜嗕竴涓悕瀛楋紝鍙玀yStruct銆?br />typedef struct tagMyStruct MyStruct;
銆銆鍥犳錛孧yStruct瀹為檯涓婄浉褰撲簬struct tagMyStruct錛屾垜浠彲浠ヤ嬌鐢∕yStruct varName鏉ュ畾涔夊彉閲忋?br />銆銆絳旀涓庡垎鏋?br />銆銆C璇█褰撶劧鍏佽鍦ㄧ粨鏋勪腑鍖呭惈鎸囧悜瀹冭嚜宸辯殑鎸囬拡錛屾垜浠彲浠ュ湪寤虹珛閾捐〃絳夋暟鎹粨鏋勭殑瀹炵幇涓婄湅鍒版棤鏁拌繖鏍風殑渚嬪瓙錛屼笂榪頒唬鐮佺殑鏍規(guī)湰闂鍦ㄤ簬typedef鐨勫簲鐢ㄣ?br />銆銆鏍規(guī)嵁鎴戜滑涓婇潰鐨勯槓榪板彲浠ョ煡閬擄細鏂扮粨鏋勫緩绔嬬殑榪囩▼涓亣鍒頒簡pNext鍩熺殑澹版槑錛岀被鍨嬫槸pNode錛岃鐭ラ亾pNode琛ㄧず鐨勬槸綾誨瀷鐨勬柊鍚嶅瓧錛岄偅涔堝湪綾誨瀷鏈韓榪樻病鏈夊緩绔嬪畬鎴愮殑鏃跺欙紝榪欎釜綾誨瀷鐨勬柊鍚嶅瓧涔熻繕涓嶅瓨鍦紝涔熷氨鏄榪欎釜鏃跺欑紪璇戝櫒鏍規(guī)湰涓嶈璇唒Node銆?br />銆銆瑙e喅榪欎釜闂鐨勬柟娉曟湁澶氱錛?br />銆銆1)銆?br />typedef struct tagNode
{
銆char *pItem;
銆struct tagNode *pNext;
} *pNode;
銆銆2)銆?br />typedef struct tagNode *pNode;
struct tagNode
{
銆char *pItem;
銆pNode pNext;
};
銆銆娉ㄦ剰錛氬湪榪欎釜渚嬪瓙涓紝浣犵敤typedef緇欎竴涓繕鏈畬鍏ㄥ0鏄庣殑綾誨瀷璧鋒柊鍚嶅瓧銆侰璇█緙栬瘧鍣ㄦ敮鎸佽繖縐嶅仛娉曘?br />銆銆3)銆佽鑼冨仛娉曪細
struct tagNode
{
銆char *pItem;
銆struct tagNode *pNext;
};
typedef struct tagNode *pNode;
銆3. typedef & #define鐨勯棶棰?br />銆銆鏈変笅闈袱縐嶅畾涔塸Str鏁版嵁綾誨瀷鐨勬柟娉曪紝涓よ呮湁浠涔堜笉鍚岋紵鍝竴縐嶆洿濂戒竴鐐癸紵
typedef char *pStr;
#define pStr char *;
銆銆絳旀涓庡垎鏋愶細
銆銆閫氬父璁詫紝typedef瑕佹瘮#define瑕佸ソ錛岀壒鍒槸鍦ㄦ湁鎸囬拡鐨勫満鍚堛傝鐪嬩緥瀛愶細
typedef char *pStr1;
#define pStr2 char *;
pStr1 s1, s2;
pStr2 s3, s4;
銆銆鍦ㄤ笂榪扮殑鍙橀噺瀹氫箟涓紝s1銆乻2銆乻3閮借瀹氫箟涓篶har *錛岃宻4鍒欏畾涔夋垚浜哻har錛屼笉鏄垜浠墍棰勬湡鐨勬寚閽堝彉閲忥紝鏍規(guī)湰鍘熷洜灝卞湪浜?define鍙槸綆鍗曠殑瀛楃涓叉浛鎹㈣宼ypedef鍒欐槸涓轟竴涓被鍨嬭搗鏂板悕瀛椼?br />銆銆#define鐢ㄦ硶渚嬪瓙錛?br />#define f(x) x*x
main( )
{
銆int a=6錛宐=2錛宑錛?br />銆c=f(a) / f(b)錛?br />銆printf("%d \\n"錛宑)錛?br />}
銆銆浠ヤ笅紼嬪簭鐨勮緭鍑虹粨鏋滄槸: 36銆?br />銆銆鍥犱負濡傛鍘熷洜錛屽湪璁稿C璇█緙栫▼瑙勮寖涓彁鍒頒嬌鐢?define瀹氫箟鏃訛紝濡傛灉瀹氫箟涓寘鍚〃杈懼紡錛屽繀欏諱嬌鐢ㄦ嫭鍙鳳紝鍒欎笂榪板畾涔夊簲璇ュ涓嬪畾涔夋墠瀵癸細
#define f(x) (x*x)
銆銆褰撶劧錛屽鏋滀綘浣跨敤typedef灝辨病鏈夎繖鏍風殑闂銆?br />銆銆4. typedef & #define鐨勫彟涓渚?br />銆銆涓嬮潰鐨勪唬鐮佷腑緙栬瘧鍣ㄤ細鎶ヤ竴涓敊璇紝浣犵煡閬撴槸鍝釜璇彞閿欎簡鍚楋紵
typedef char * pStr;
char string[4] = "abc";
const char *p1 = string;
const pStr p2 = string;
p1++;
p2++;
銆銆絳旀涓庡垎鏋愶細
銆銆鏄痯2++鍑洪敊浜嗐傝繖涓棶棰樺啀涓嬈℃彁閱掓垜浠細typedef鍜?define涓嶅悓錛屽畠涓嶆槸綆鍗曠殑鏂囨湰鏇挎崲銆備笂榪頒唬鐮佷腑const pStr p2騫朵笉絳変簬const char * p2銆俢onst pStr p2鍜宑onst long x鏈川涓婃病鏈夊尯鍒紝閮芥槸瀵瑰彉閲忚繘琛屽彧璇婚檺鍒訛紝鍙笉榪囨澶勫彉閲弍2鐨勬暟鎹被鍨嬫槸鎴戜滑鑷繁瀹氫箟鐨勮屼笉鏄郴緇熷浐鏈夌被鍨嬭屽凡銆傚洜姝わ紝const pStr p2鐨勫惈涔夋槸錛氶檺瀹氭暟鎹被鍨嬩負char *鐨勫彉閲弍2涓哄彧璇伙紝鍥犳p2++閿欒銆?br />銆銆#define涓巘ypedef寮曠敵璋?br />銆銆1) #define瀹忓畾涔夋湁涓涓壒鍒殑闀垮錛氬彲浠ヤ嬌鐢?#ifdef ,#ifndef絳夋潵榪涜閫昏緫鍒ゆ柇錛岃繕鍙互浣跨敤#undef鏉ュ彇娑堝畾涔夈?br />銆銆2) typedef涔熸湁涓涓壒鍒殑闀垮錛氬畠絎﹀悎鑼冨洿瑙勫垯錛屼嬌鐢╰ypedef瀹氫箟鐨勫彉閲忕被鍨嬪叾浣滅敤鑼冨洿闄愬埗鍦ㄦ墍瀹氫箟鐨勫嚱鏁版垨鑰呮枃浠跺唴錛堝彇鍐充簬姝ゅ彉閲忓畾涔夌殑浣嶇疆錛夛紝鑰屽畯瀹氫箟鍒欐病鏈夎繖縐嶇壒鎬с?br />銆銆5. typedef & 澶嶆潅鐨勫彉閲忓0鏄?br />銆銆鍦ㄧ紪紼嬪疄璺典腑錛屽挨鍏舵槸鐪嬪埆浜轟唬鐮佺殑鏃跺欙紝甯稿父浼氶亣鍒版瘮杈冨鏉傜殑鍙橀噺澹版槑,浣跨敤typedef浣滅畝鍖栬嚜鏈夊叾浠峰鹼紝姣斿錛?br />銆銆涓嬮潰鏄笁涓彉閲忕殑澹版槑錛屾垜鎯充嬌鐢╰ypdef鍒嗗埆緇欏畠浠畾涔変竴涓埆鍚嶏紝璇烽棶璇ュ浣曞仛錛?br />>1錛歩nt *(*a[5])(int, char*);
>2錛歷oid (*b[10]) (void (*)());
>3. doube(*)() (*pa)[9];
銆銆絳旀涓庡垎鏋愶細
銆銆瀵瑰鏉傚彉閲忓緩绔嬩竴涓被鍨嬪埆鍚嶇殑鏂規(guī)硶寰堢畝鍗曪紝浣犲彧瑕佸湪浼犵粺鐨勫彉閲忓0鏄庤〃杈懼紡閲岀敤綾誨瀷鍚嶆浛浠e彉閲忓悕錛岀劧鍚庢妸鍏抽敭瀛梩ypedef鍔犲湪璇ヨ鍙ョ殑寮澶村氨琛屼簡銆?br />>1錛歩nt *(*a[5])(int, char*);
//pFun鏄垜浠緩鐨勪竴涓被鍨嬪埆鍚?br />typedef int *(*pFun)(int, char*);
//浣跨敤瀹氫箟鐨勬柊綾誨瀷鏉ュ0鏄庡璞★紝絳変環(huán)浜巌nt* (*a[5])(int, char*);
pFun a[5];
>2錛歷oid (*b[10]) (void (*)());
//棣栧厛涓轟笂闈㈣〃杈懼紡钃濊壊閮ㄥ垎澹版槑涓涓柊綾誨瀷
typedef void (*pFunParam)();
//鏁翠綋澹版槑涓涓柊綾誨瀷
typedef void (*pFun)(pFunParam);
//浣跨敤瀹氫箟鐨勬柊綾誨瀷鏉ュ0鏄庡璞★紝絳変環(huán)浜巚oid (*b[10]) (void (*)());
pFun b[10];
>3. doube(*)() (*pa)[9];
//棣栧厛涓轟笂闈㈣〃杈懼紡钃濊壊閮ㄥ垎澹版槑涓涓柊綾誨瀷
typedef double(*pFun)();
//鏁翠綋澹版槑涓涓柊綾誨瀷
typedef pFun (*pFunParam)[9];
//浣跨敤瀹氫箟鐨勬柊綾誨瀷鏉ュ0鏄庡璞★紝絳変環(huán)浜巇oube(*)() (*pa)[9];
pFunParam pa;
]]>
2.涓嬭澆ctags for win32騫惰В鍘嬪埌c:\ctags\鐩綍涓?
3.灝哻:\ctags鍔犲叆windows鐨刾ath鐜鍙橀噺涓?
4.涓嬭澆omnicppcomplete灝嗚В鍘嬪埌vim瀹夎鐩綍鐨剉imfiles鐩綍涓?
5.杞埌qt鐨刬nclude鐩綍涓嬫墽琛宑tags -R --c++-kinds=+p --fields=+iaS --extra=+q;鍛戒護瀹屾垚鍚庝細鍦ㄨ鐩綍涓?br />鐢熸垚涓涓猼ags鏂囦歡錛屽畠鏄痮mnicppcomplete鍜寁im鐢ㄦ潵浣滃懡浠よˉ鍏ㄧ殑鏁版嵁搴撱?br />6.鍦╭t鐨剆rc鐩綍涓嬪啀鎵ц涓閬嶄笂榪板懡浠?
7.緙栬緫vim瀹夎鐩綍涓嬬殑_vimrc鏂囦歡錛屽皢涓嬭堪涓よ鍔犲叆鍏朵腑
set tags+=c:\Qt\4.3.3\include\tags
set tags+=c:\Qt\4.3.3\src\tag
鍏朵腑c:\Qt\4.3.3\鏄垜鏈哄櫒涓妐t 鐨勫畨瑁呯洰褰曪紝鏍規(guī)嵁浣犵殑鎯呭喌浣滃嚭璋冩暣銆?br />8.鍒頒綘鐨勫伐紼嬬洰褰曚笅鎵ц5姝ヤ腑鐨勫懡浠?
9.鐢╲im鎵撳紑涓涓猚pp鏂囦歡璇曚竴涓嬪惂錛屽搱鍝?
]]>
涓銆侀澶囩煡璇嗏旂▼搴忕殑鍐呭瓨鍒嗛厤
涓涓敱c/C++緙栬瘧鐨勭▼搴忓崰鐢ㄧ殑鍐呭瓨鍒嗕負浠ヤ笅鍑犱釜閮ㄥ垎
1銆佹爤鍖猴紙stack錛夆?鐢辯紪璇戝櫒鑷姩鍒嗛厤閲婃斁 錛屽瓨鏀懼嚱鏁扮殑鍙傛暟鍊鹼紝灞閮ㄥ彉閲忕殑鍊肩瓑銆傚叾鎿嶄綔鏂瑰紡綾諱技浜庢暟鎹粨鏋勪腑鐨勬爤銆?
2銆佸爢鍖猴紙heap錛?鈥?涓鑸敱紼嬪簭鍛樺垎閰嶉噴鏀撅紝 鑻ョ▼搴忓憳涓嶉噴鏀撅紝紼嬪簭緇撴潫鏃跺彲鑳界敱O(jiān)S鍥炴敹 銆傛敞鎰忓畠涓庢暟鎹粨鏋勪腑鐨勫爢鏄袱鍥炰簨錛屽垎閰嶆柟寮忓掓槸綾諱技浜庨摼琛紝鍛靛懙銆?
3銆佸叏灞鍖猴紙闈欐佸尯錛夛紙static錛夆旓紝鍏ㄥ眬鍙橀噺鍜岄潤鎬佸彉閲忕殑瀛樺偍鏄斁鍦ㄤ竴鍧楃殑錛屽垵濮嬪寲鐨勫叏灞鍙橀噺鍜岄潤鎬佸彉閲忓湪涓鍧楀尯鍩燂紝 鏈垵濮嬪寲鐨勫叏灞鍙橀噺鍜屾湭鍒濆鍖栫殑闈欐佸彉閲忓湪鐩擱偦鐨勫彟涓鍧楀尯鍩熴?- 紼嬪簭緇撴潫鍚庢湁緋葷粺閲婃斁
4銆佹枃瀛楀父閲忓尯 鈥斿父閲忓瓧絎︿覆灝辨槸鏀懼湪榪欓噷鐨勩?紼嬪簭緇撴潫鍚庣敱緋葷粺閲婃斁
5銆佺▼搴忎唬鐮佸尯鈥斿瓨鏀懼嚱鏁頒綋鐨勪簩榪涘埗浠g爜銆?
浜屻佷緥瀛愮▼搴?
榪欐槸涓涓墠杈堝啓鐨勶紝闈炲父璇︾粏
//main.cpp
int a =0; 鍏ㄥ眬鍒濆鍖栧尯
char*p1; 鍏ㄥ眬鏈垵濮嬪寲鍖?
main()
{
int b;// 鏍?
char s[] ="abc"; //鏍?
char*p2; //鏍?
char*p3 ="123456"; 123456\0";//鍦ㄥ父閲忓尯錛宲3鍦ㄦ爤涓娿?
staticint c =0錛?//鍏ㄥ眬錛堥潤鎬侊級鍒濆鍖栧尯
p1 = (char*)malloc(10);
p2 = (char*)malloc(20);
//鍒嗛厤寰楁潵寰?0鍜?0瀛楄妭鐨勫尯鍩熷氨鍦ㄥ爢鍖恒?
strcpy(p1, "123456"); //123456\0鏀懼湪甯擱噺鍖猴紝緙栬瘧鍣ㄥ彲鑳戒細灝嗗畠涓巔3鎵鎸囧悜鐨?123456"浼樺寲鎴愪竴涓湴鏂廣?
}
涓夈佸爢鍜屾爤鐨勭悊璁虹煡璇?
3.1鐢寵鏂瑰紡
stack:
鐢辯郴緇熻嚜鍔ㄥ垎閰嶃?渚嬪錛屽0鏄庡湪鍑芥暟涓竴涓眬閮ㄥ彉閲?int b; 緋葷粺鑷姩鍦ㄦ爤涓負b寮杈熺┖闂?
heap:
闇瑕佺▼搴忓憳鑷繁鐢寵錛屽茍鎸囨槑澶у皬錛屽湪c涓璵alloc鍑芥暟
濡俻1 = (char *)malloc(10);
鍦–++涓敤new榪愮畻絎?
濡俻2 = (char *)malloc(10);
浣嗘槸娉ㄦ剰p1銆乸2鏈韓鏄湪鏍堜腑鐨勩?
3.2 鐢寵鍚庣郴緇熺殑鍝嶅簲
鏍堬細鍙鏍堢殑鍓╀綑絀洪棿澶т簬鎵鐢寵絀洪棿錛岀郴緇熷皢涓虹▼搴忔彁渚涘唴瀛橈紝鍚﹀垯灝嗘姤寮傚父鎻愮ず鏍堟孩鍑恒?
鍫嗭細棣栧厛搴旇鐭ラ亾鎿嶄綔緋葷粺鏈変竴涓褰曠┖闂插唴瀛樺湴鍧鐨勯摼琛紝褰撶郴緇熸敹鍒扮▼搴忕殑鐢寵鏃訛紝
浼?
閬嶅巻璇ラ摼琛紝瀵繪壘絎竴涓┖闂村ぇ浜庢墍鐢寵絀洪棿鐨勫爢緇撶偣錛岀劧鍚庡皢璇ョ粨鐐逛粠絀洪棽緇撶偣閾捐〃涓垹闄わ紝騫跺皢璇ョ粨鐐圭殑絀洪棿鍒嗛厤緇欑▼搴忥紝鍙﹀錛屽浜庡ぇ澶氭暟緋葷粺錛屼細鍦ㄨ繖鍧楀唴
瀛樼┖闂翠腑鐨勯鍦板潃澶勮褰曟湰嬈″垎閰嶇殑澶у皬錛岃繖鏍鳳紝浠g爜涓殑delete璇彞鎵嶈兘姝g‘鐨勯噴鏀炬湰鍐呭瓨絀洪棿銆傚彟澶栵紝鐢變簬鎵懼埌鐨勫爢緇撶偣鐨勫ぇ灝忎笉涓瀹氭濂界瓑浜庣敵璇風殑澶?
灝忥紝緋葷粺浼氳嚜鍔ㄧ殑灝嗗浣欑殑閭i儴鍒嗛噸鏂版斁鍏ョ┖闂查摼琛ㄤ腑銆?
3.3鐢寵澶у皬鐨勯檺鍒?
鏍堬細鍦╓indows涓?鏍堟槸鍚戜綆鍦板潃鎵╁睍鐨勬暟鎹粨鏋勶紝
鏄竴鍧楄繛緇殑鍐呭瓨鐨勫尯鍩熴傝繖鍙ヨ瘽鐨勬剰鎬濇槸鏍堥《鐨勫湴鍧鍜屾爤鐨勬渶澶у閲忔槸緋葷粺棰勫厛瑙勫畾濂界殑錛屽湪 WINDOWS涓嬶紝鏍堢殑澶у皬鏄?M錛堜篃鏈夌殑璇存槸1M錛屾諱箣鏄竴
涓紪璇戞椂灝辯‘瀹氱殑甯告暟錛夛紝濡傛灉鐢寵鐨勭┖闂磋秴榪囨爤鐨勫墿浣欑┖闂存椂錛屽皢鎻愮ずoverflow銆傚洜姝わ紝鑳戒粠鏍堣幏寰楃殑絀洪棿杈冨皬銆?
鍫嗭細鍫嗘槸鍚戦珮鍦板潃鎵╁睍鐨勬暟鎹粨鏋勶紝鏄笉榪炵畫鐨勫唴瀛樺尯鍩熴傝繖鏄敱浜庣郴緇熸槸鐢ㄩ摼琛ㄦ潵瀛樺偍鐨勭┖闂插唴瀛樺湴鍧鐨勶紝鑷劧鏄笉榪炵畫鐨勶紝鑰岄摼琛ㄧ殑閬嶅巻鏂瑰悜鏄敱浣庡湴鍧鍚戦珮鍦板潃銆傚爢鐨勫ぇ灝忓彈闄愪簬璁$畻鏈虹郴緇熶腑鏈夋晥鐨勮櫄鎷熷唴瀛樸傜敱姝ゅ彲瑙侊紝鍫嗚幏寰楃殑絀洪棿姣旇緝鐏墊椿錛屼篃姣旇緝澶с?
3.4鐢寵鏁堢巼鐨勬瘮杈冿細
鏍堢敱緋葷粺鑷姩鍒嗛厤錛岄熷害杈冨揩銆備絾紼嬪簭鍛樻槸鏃犳硶鎺у埗鐨勩?
鍫嗘槸鐢眓ew鍒嗛厤鐨勫唴瀛橈紝涓鑸熷害姣旇緝鎱紝鑰屼笖瀹規(guī)槗浜х敓鍐呭瓨紕庣墖,涓嶈繃鐢ㄨ搗鏉ユ渶鏂逛究.
鍙﹀錛屽湪WINDOWS涓嬶紝鏈濂界殑鏂瑰紡鏄敤VirtualAlloc鍒嗛厤鍐呭瓨錛屼粬涓嶆槸鍦ㄥ爢錛屼篃涓嶆槸鍦ㄦ爤鏄洿鎺ュ湪榪涚▼鐨勫湴鍧絀洪棿涓繚鐣欎竴蹇唴瀛橈紝铏界劧鐢ㄨ搗鏉ユ渶涓嶆柟渚褲備絾鏄熷害蹇紝涔熸渶鐏墊椿
3.5鍫嗗拰鏍堜腑鐨勫瓨鍌ㄥ唴瀹?
鏍堬細 鍦ㄥ嚱鏁拌皟鐢ㄦ椂錛岀涓涓繘鏍堢殑鏄富鍑芥暟涓悗鐨勪笅涓鏉℃寚浠わ紙鍑芥暟璋冪敤璇彞鐨勪笅涓鏉″彲鎵ц璇彞錛夌殑鍦板潃錛岀劧鍚庢槸鍑芥暟鐨勫悇涓弬鏁幫紝鍦ㄥぇ澶氭暟鐨凜緙栬瘧鍣ㄤ腑錛屽弬鏁版槸鐢卞彸寰宸﹀叆鏍堢殑錛岀劧鍚庢槸鍑芥暟涓殑灞閮ㄥ彉閲忋傛敞鎰忛潤鎬佸彉閲忔槸涓嶅叆鏍堢殑銆?
褰撴湰嬈″嚱鏁拌皟鐢ㄧ粨鏉熷悗錛屽眬閮ㄥ彉閲忓厛鍑烘爤錛岀劧鍚庢槸鍙傛暟錛屾渶鍚庢爤欏舵寚閽堟寚鍚戞渶寮濮嬪瓨鐨勫湴鍧錛屼篃灝辨槸涓誨嚱鏁頒腑鐨勪笅涓鏉℃寚浠わ紝紼嬪簭鐢辮鐐圭戶緇繍琛屻?
鍫嗭細涓鑸槸鍦ㄥ爢鐨勫ご閮ㄧ敤涓涓瓧鑺傚瓨鏀懼爢鐨勫ぇ灝忋傚爢涓殑鍏蜂綋鍐呭鏈夌▼搴忓憳瀹夋帓銆?
3.6瀛樺彇鏁堢巼鐨勬瘮杈?
char s1[] = "aaaaaaaaaaaaaaa";
char *s2 = "bbbbbbbbbbbbbbbbb";
aaaaaaaaaaa鏄湪榪愯鏃跺埢璧嬪肩殑錛?
鑰宐bbbbbbbbbb鏄湪緙栬瘧鏃跺氨紜畾鐨勶紱
浣嗘槸錛屽湪浠ュ悗鐨勫瓨鍙栦腑錛屽湪鏍堜笂鐨勬暟緇勬瘮鎸囬拡鎵鎸囧悜鐨勫瓧絎︿覆(渚嬪鍫?蹇?
姣斿錛?
void main()
{
char a =1;
char c[] ="1234567890";
char*p ="1234567890";
a = c[1];
a = p[1];
return;
}
瀵瑰簲鐨勬眹緙栦唬鐮?
10: a = c[1];
00401067 8A 4D F1 mov cl,byte ptr [ebp-0Fh]
0040106A 88 4D FC mov byte ptr [ebp-4],cl
11: a = p[1];
0040106D 8B 55 EC mov edx,dword ptr [ebp-14h]
00401070 8A 42 01 mov al,byte ptr [edx+1]
00401073 88 45 FC mov byte ptr [ebp-4],al
絎竴縐嶅湪璇誨彇鏃剁洿鎺ュ氨鎶婂瓧絎︿覆涓殑鍏冪礌璇誨埌瀵勫瓨鍣╟l涓紝鑰岀浜岀鍒欒鍏堟妸鎸囬拡鍊艱鍒癳dx涓紝鍦ㄦ牴鎹甧dx璇誨彇瀛楃錛屾樉鐒舵參浜嗐?
3.7灝忕粨錛?
鍫嗗拰鏍堢殑鍖哄埆鍙互鐢ㄥ涓嬬殑姣斿柣鏉ョ湅鍑猴細
浣跨敤鏍堝氨璞℃垜浠幓楗閲屽悆楗紝鍙鐐硅彍錛堝彂鍑虹敵璇鳳級銆佷粯閽便佸拰鍚冿紙浣跨敤錛夛紝鍚冮ケ浜嗗氨璧幫紝涓嶅繀鐞嗕細鍒囪彍銆佹礂鑿滅瓑鍑嗗宸ヤ綔鍜屾礂紕椼佸埛閿呯瓑鎵熬宸ヤ綔錛屼粬鐨勫ソ澶勬槸蹇嵎錛屼絾鏄嚜鐢卞害灝忋?
浣跨敤鍫嗗氨璞℃槸鑷繁鍔ㄦ墜鍋氬枩嬈㈠悆鐨勮彍鑲達紝姣旇緝楹葷儲錛屼絾鏄瘮杈冪鍚堣嚜宸辯殑鍙e懗錛岃屼笖鑷敱搴﹀ぇ銆?
鍫嗗拰鏍堢殑鍖哄埆涓昏鍒嗭細
鎿嶄綔緋葷粺鏂歸潰鐨勫爢鍜屾爤錛屽涓婇潰璇寸殑閭d簺錛屼笉澶氳浜嗐?
榪樻湁灝辨槸鏁版嵁緇撴瀯鏂歸潰鐨勫爢鍜屾爤錛岃繖浜涢兘鏄笉鍚岀殑姒傚康銆傝繖閲岀殑鍫嗗疄闄呬笂鎸囩殑灝辨槸錛堟弧瓚沖爢鎬ц川鐨勶級浼樺厛闃熷垪鐨勪竴縐嶆暟鎹粨鏋勶紝絎?涓厓绱犳湁鏈楂樼殑浼樺厛鏉冿紱鏍堝疄闄呬笂灝辨槸婊¤凍鍏堣繘鍚庡嚭鐨勬ц川鐨勬暟瀛︽垨鏁版嵁緇撴瀯銆?
铏界劧鍫嗘爤錛屽爢鏍堢殑璇存硶鏄繛璧鋒潵鍙紝浣嗘槸浠栦滑榪樻槸鏈夊緢澶у尯鍒殑錛岃繛鐫鍙彧鏄敱浜庡巻鍙茬殑鍘熷洜
]]>
$ORACLE_HOME\OCI\INCLUDE:澶存枃浠?
$ORACLE_HOME\OCI\LIB\BC: for Borlanf C++鐨凮CI搴?
$ORACLE_HOME\OCI\LIB\MSVC: for MS Visual C++鐨凮CI搴?
濡傛灉鏄痷nix涓嬶紝瀵逛簬ORACLE8i錛屽垯OCI搴撳湪$ORACLE_HOME/lib涓?濡傛灉鏄?i,鍒欏湪$ORACLE_HOME/lib32涓嬶紝搴撴枃浠跺悕涓鑸負libclntsh.so
1錛?鍒涘緩OCI鐜鍗沖垱寤哄拰鍒濆鍖朞CI宸ヤ綔鐜錛屽叾浠栫殑OCI鍑芥暟闇瑕丱CI鐜鎵嶈兘鎵ц銆?
2錛?闇瑕佺敵璇風殑鍙ユ焺綾誨瀷錛?
OCI鐜鍙ユ焺錛?OCI_HTYPE_ENV鈥斿畠瀹氫箟鎵鏈塐CI鍑芥暟鐨勭幆澧冭皟鐢ㄧ幆澧冿紝鏄叾浠栧彞鏌勭殑鐖跺彞鏌勩?鐢監(jiān)CIEnvInit鎴朞CIEnvCreate鐢熸垚)
閿欒鍙ユ焺錛歄CI_HTYPE_ERROR鈥斾綔涓轟竴浜汷CI鍑芥暟鐨勫弬鏁幫紝鐢ㄦ潵璁板綍榪欎簺OCI鍑芥暟鎿嶄綔榪囩▼涓墍浜х敓鐨勯敊璇紝褰撴湁閿欒鍙戠敓鏃訛紝鍙敤COIErrorGet()鏉ヨ鍙栭敊璇彞鏌?涓褰曠殑閿欒淇℃伅銆?
鏈嶅姟鍣ㄧ幆澧冨彞鏌勶細OCI_HTYPE_SVCCTX鈥斿畾涔塐CI璋冪敤鐨勬湇鍔″櫒鎿嶄綔鐜錛屽畠鍖呭惈鏈嶅姟鍣ㄣ佺敤鎴蜂細璇濆拰浜嬪姟涓夌鍙ユ焺銆?
鏈嶅姟鍣ㄥ彞鏌勶細OCI_HTYPE_SERVER鈥旀爣璇嗘暟鎹簮錛屽畠杞崲涓轟笌鏈嶅姟鍣ㄧ殑鐗╃悊榪炴帴銆?
鐢ㄦ埛浼氳瘽鍙ユ焺錛歄CI_HTYPE_SESSION鈥斿畾涔夌敤鎴瘋鑹插拰鏉冮檺鍙奜CI璋冪敤鐨勬墽琛岀幆澧冦?
浜嬪姟鍙ユ焺錛歄CI_HTYPE_TRANS鈥斿畾涔夋墽琛孲QL鎿嶄綔鐨勪簨鍔$幆澧冿紝浜嬪姟鐜涓寘鍚敤鎴風殑浼氳瘽鐘舵佷俊鎭?
璇彞鍙ユ焺錛歄CI_HTYPE_STMT鈥旀槸涓涓爣璇哠QL璇彞鎴朠L/SQL鍧楋紝浠ュ強鍏剁浉鍏沖睘鎬х殑鐜銆?
Bind/Define鍙ユ焺錛氬睘浜庤鍙ュ彞鏌勭殑瀛愬彞鏌勶紝鐢監(jiān)CI搴撻殣寮忚嚜鍔ㄧ敓鎴愩傜敤鎴蜂笉闇瑕佽嚜宸卞啀鐢寵錛孫CI杈撳叆鍙橀噺瀛樺偍鍦╞ind 鍙ユ焺涓紝杈撳嚭鍙橀噺瀛樺偍鍦ㄥ畾涔夊彞鏌勪腑
銆3錛?鍙ユ焺灞炴у寘鎷細
鏈嶅姟鍣ㄧ幆澧冨彞鏌勫睘鎬э細(OCI_HTYPE_SVCCTX)
OCI_ATTR_SERVER鈥旇緗?璇誨彇鏈嶅姟鐜鐨勬湇鍔″櫒鐜灞炴?
OCI_ATTR_SESSION鈥旇緗?璇誨彇鏈嶅姟鐜鐨勪細璇濊璇佺幆澧冨睘鎬?
OCI_ATTR_TRANS鈥旇緗?璇誨彇鏈嶅姟鐜鐨勪簨鍔$幆澧冨睘鎬?
鐢ㄦ埛浼氳瘽鍙ユ焺灞炴э細(OCI_HTYPE_SESSION)
OCI_ATTR_USERNAME鈥旇緗細璇濊璇佹墍浣跨敤鐨勭敤鎴峰悕
OCI_ATTR_PASSWORD鈥旇緗細璇濊璇佹墍浣跨敤鐨勭敤鎴峰彛浠?
鏈嶅姟鍣ㄥ彞鏌勶細(OCI_HTYPE_SEVER)
OCI_ATTR_NOBLOCKING_MODE鈥旇緗?璇誨彇鏈嶅姟鍣ㄨ繛鎺ワ細=TRUE鏃舵湇鍔″櫒榪炴帴璁劇疆涓洪潪闃誨鏂瑰紡
璇彞鍙ユ焺錛?OCI_HTYPE_STMT)
OCI_ATTR_ROW_COUNT鈥斿彧璇伙紝涓哄綋鍓嶅凡澶勭悊鐨勮鏁幫紝鍏禿efault=1
OCI_ATTR_STMT_TYPE鈥旇鍙栧綋鍓峉QL璇彞鐨勭被鍨嬶細
Eg : OCI_STMT_BEGIN
OCI_STMT_SELECT OCI_STMT_INSERT
OCI_STMT_UPDATE OCI_STMT_DELETE
OCI_ATTR_PARAM_COUNT鈥旇繑鍥炶鍙ラ夋嫨鍒楄〃涓殑鍒楁暟
4錛?鍏充簬杈撳嚭鍙橀噺瀹氫箟錛氬鏋滃湪璇彞鎵ц鍓嶅氨鐭ラ亾select璇彞鐨勯夋嫨鍒楄〃緇撴瀯錛屽垯瀹氫箟杈撳嚭鎿嶄綔鍙湪璋冪敤 OCISTMTExecute鍓嶈繘琛岋紝濡傛灉鏌ヨ璇彞鐨勫弬鏁頒負鐢ㄦ埛鍔ㄦ佽緭鍏ョ殑錛屽垯蹇呴』鍦ㄦ墽琛屽悗瀹氫箟銆?
5錛?OCI鍑芥暟榪斿洖鍊鹼細
OCI_SUCCESS 鈥撳嚱鏁版墽琛屾垚鍔?(=0)
OCI_SUCCESS_WITH_INFO 鈥撴墽琛屾垚鍔燂紝浣嗘湁璇婃柇娑堟伅榪斿洖錛屽彲鑳芥槸璀﹀憡淇℃伅
OCI_NO_DATA鈥斿嚱鏁版墽琛屽畬鎴愶紝浣嗘病鏈夊叾浠栨暟鎹?
OCI_ERROR鈥斿嚱鏁版墽琛岄敊璇?
OCI_INVALID_HANDLE鈥斾紶閫掔粰鍑芥暟鐨勫弬鏁頒負鏃犳晥鍙ユ焺錛屾垨浼犲洖鐨勫彞鏌勬棤鏁?
OCI_NEED_DATA鈥旈渶瑕佸簲鐢ㄧ▼搴忔彁渚涜繍琛屾椂鍒葷殑鏁版嵁
OCI_CONTINUE鈥斿洖璋冨嚱鏁拌繑鍥炰唬鐮侊紝璇存槑鍥炶皟鍑芥暟闇瑕丱CI搴撴仮澶嶅叾姝e父鐨勫鐞嗘搷浣?
OCI_STILL_EXECUTING鈥旀湇鍔$幆澧冨緩绔嬪湪闈為樆濉炴ā寮忥紝OCI鍑芥暟璋冪敤姝e湪鎵ц涓?
6錛?
OCI榪炴帴鏈変簩縐嶆柟寮忥細Blocking(闃誨鏂瑰紡)鍜宯on_Blocking(闈為樆濉炴柟寮?錛岄樆濉炴柟寮忓氨鏄綋璋冪敤 OCI鎿嶄綔鏃訛紝蹇呴』絳夊埌姝CI鎿?
浣滃畬鎴愬悗鏈嶅姟鍣ㄦ墠榪斿洖瀹㈡埛绔浉搴旂殑淇℃伅錛屼笉綆℃槸鎴愬姛榪樻槸澶辮觸銆傞潪闃誨鏂瑰紡鏄綋瀹㈡埛绔彁浜CI鎿嶄綔緇欐湇鍔″櫒鍚庯紝鏈嶅姟鍣ㄧ珛鍗寵繑鍥?
OCI_STILL_EXECUTING淇℃伅錛岃屽茍涓嶇瓑寰呮湇鍔$鐨勬搷浣滃畬鎴愩?
瀵逛簬non-blocking鏂瑰紡錛屽簲鐢ㄧ▼搴忚嫢鏀跺埌涓涓狾CI鍑芥暟鐨勮繑鍥炲間負 OCI_STILL_EXECUTING鏃跺繀欏誨啀嬈″姣忎竴涓狾CI鍑芥暟鐨勮繑鍥炲艱繘琛屽垽鏂紝鍒ゆ柇鍏舵垚鍔熶笌鍚︺?
鍙氳繃璁劇疆鏈嶅姟鍣ㄥ睘鎬т負OCI_ATTR_NONBLOCKING_MODE鏉ュ疄鐜般傜郴緇熼粯璁ゆ柟寮忎負闃誨妯″紡.
7錛?OCI鍑芥暟璁劇疆鐨勬ā寮忔湁錛?
OCI_DEFUALT:浣跨敤OCI榛樿鐨勭幆澧?
OCI_THREADED錛氱嚎紼嬬幆澧冧笅浣跨敤OCI
OCI_OBJECT錛氬璞℃ā寮?
OCI_SHARED錛氬叡浜ā寮?
OCI_EVENTS
OCI_NO_UCB
OCI_ENV_NO_MUTEX錛氶潪浜掓枼璁塊棶妯″紡
鍏朵腑妯″紡鍙互鐢ㄩ昏緫榪愮畻絎﹁繘琛岃凱鍔狅紝灝嗗嚱鏁拌緗垚澶氬縐嶆ā寮忥細濡俶ode=OCI_SHREADED| OCI_OBJECT
8錛?褰撳簲鐢ㄨ繘紼嬩笌鏈嶅姟鍣ㄦ柇寮榪炴帴鏃訛紝紼嬪簭娌℃湁浣跨敤OCITransCommit()榪涜浜嬪姟鐨勬彁浜わ紝鍒欐墍鏈夋椿鍔ㄧ殑浜嬪姟浼氳嚜鍔ㄥ洖婊氥?
9錛?OCI閲嶅畾涔夋暟鎹被鍨?
typedef unsigned char ub1;
typedef signed char sb1;
typedef unsigned short ub2;
typedef signed short sb2;
typedef unsigned int ub4;
typedef signed int sb4;
typedef ub4 duword;
typedef sb4 dsword;
typedef dsword dword;
10錛?鍦⊿QL璇彞鍑嗗鍚庯紝鍙互鐢∣CIAttrSet(0璁劇疆璇ヨ鍙ョ殑綾誨瀷灞炴CI_ATTR_STMT_TYPE錛屼互鍚庡彲璇誨彇璇彞灞炴э紝鏍規(guī)嵁灞炴у垎鍒繘琛屽鐞嗐?
11錛?鎵歸噺緇戝畾杈撳叆鍜屽畾涔夎緭鍑哄弬鏁幫細灝嗘暟鎹瓨鍏ヤ竴涓潤鎬佹暟鎹粍涓備竴嬈℃墽琛屽彲浠ユ彁浜ゆ垨璇誨彇澶氳璁板綍鍊箋?
12錛?緇撳悎鍗犱綅絎﹀拰鎸囩ず鍣ㄥ彉閲忥細
鍗?
浣嶇錛氬湪紼嬪簭涓紝涓浜汼QL璇彞闇瑕佸湪紼嬪簭榪愯鏃舵墠鑳界‘瀹氬畠鐨勮鍙ユ暟鎹紝鍦ㄨ璁℃椂鍙敤涓涓崰浣嶇鏉ヤ唬鏇匡紝褰撶▼搴忚繍琛屾椂錛屽湪瀹冨噯澶囧ソ璇彞鍚庯紝蹇呴』涓烘瘡涓崰浣?
絎︽寚瀹氫竴涓彉閲忥紝鍗沖皢鍗犱綅絎︿笌紼嬪簭鍙橀噺鍦板潃緇撳悎錛屾墽琛屾椂錛孫racle灝變粠榪欎簺鍙橀噺涓鍙栨暟鎹紝騫跺皢瀹冧滑涓嶴QL璇彞涓璧蜂紶閫掔粰Oracle鏈嶅姟鍣ㄦ墽琛屻?
OCI緇撳悎鍗犱綅絎︽椂錛屽畠?yōu)畣鍗犱綅绗︿笌绋嬪簭鍙橀噺鍏宠仈钃v鏉ワ紝騫跺悓鏃惰鎸囧嚭紼嬪簭鍙橀噺鐨勬暟鎹被鍨嬪拰鏁版嵁闀垮害銆?
濡傦細select * from test where name=:p1 and age>:p2
錛歱1鍜岋細p2涓哄崰浣嶇
鎸?
紺哄櫒鍙橀噺錛氱敱浜庡湪Oracle涓紝鍒楀煎彲浠ヤ負NULL錛屼絾鍦–璇█涓病鏈塏ULL鍊鹼紝涓轟簡鑳戒嬌OCI紼嬪簭琛ㄨ揪NULL鍒楀鹼紝OCI鍑芥暟鍏佽紼嬪簭涓烘墍鎵ц璇?
鍙ヤ腑鐨勭粨鍚堝彉閲忓悓鏃跺叧鑱斾竴涓寚紺虹鍙橀噺鎴栨寚紺虹鍙橀噺鏁扮粍錛屼互璇存槑鎵緇撳悎鐨勫崰浣嶇鏄惁涓篘ULL鎴栨墍璇誨彇鐨勫垪鍊兼槸鍚︿負NULL錛屼互鍙婃墍璇誨彇鐨勫垪鍊兼槸鍚﹁鎴?
鍙栥?
闄QLT錛縉TY錛圫QL Named DataType錛夊錛屾寚紺虹鍙橀噺鎴栨寚紺虹鍙橀噺鏁扮粍鐨勬暟鎹被鍨嬩負sb2,鍏跺艱鏄庯細
浣滀負杈撳叆鍙橀噺鏃訛細錛堝insert ,update璇彞涓級
銆=-1錛歄CI紼嬪簭灝哊ULL璧嬬粰Oracle琛ㄧ殑鍒楋紝蹇界暐鍗犱綅絎︾粨鍚堢殑紼嬪簭鍙橀噺鍊?
>=0錛氬簲鐢ㄧ▼搴忓皢紼嬪簭鍙橀噺鍊艱祴緇欐寚瀹氬垪
浣滀負杈撳嚭鍙橀噺鏃訛細錛堝select璇彞涓級
錛?2錛氭墍璇誨彇鐨勫垪鏁版嵁闀垮害澶т簬紼嬪簭鍙橀噺鐨勯暱搴︼紝鍒欒鎴彇銆?
=-1錛氭墍璇誨彇鐨勫間負NULL,杈撳嚭鍙橀噺鐨勫間笉浼氳鏀瑰彉銆?
=0錛氭暟鎹瀹屾暣璇誨叆鍒版寚瀹氱殑紼嬪簭鍙橀噺涓?
錛?錛氭墍璇誨彇鐨勫垪鏁版嵁闀垮害澶т簬紼嬪簭鍙橀噺鐨勯暱搴︼紝鍒欒鎴彇錛屾寚紺虹鍙橀噺鍊間負鎵璇誨彇鏁版嵁琚埅鍙栧墠鐨勫疄闄呴暱搴?
涓夛紟 OCI鍑芥暟璇存槑
娉細綰㈣壊涓鴻緭鍏ュ弬鏁? 钃濊壊涓鴻緭鍑哄弬鏁? ,鍚﹀垯涓鴻緭鍏?鍑哄弬鏁?
紺轟緥浠ヤ笅闈㈢粨鏋勪綔涓鴻鏄?
sword swResult;
OCIBind* hBind;
OCIDefine* hDefine;
OCIStmt *stmtp
OCIError *errhp錛?
OCIStmt *stmtp
OCISvcCtx * svchp
OCIEnv * envhpp;
OCISession * usrhp;
sb2 sb2aInd[30]; //鎸囩ず鍣ㄥ彉閲忥紝鐢ㄤ簬鍙栧彲鑳藉瓨鍦ㄧ┖鍊肩殑瀛楁
Typedef strcut
{
char tname[40];
int age;
} t_std;
typedef struct
{
sb2 sb2_tname[100];
sb2 sb2_age[100];
} stdInd_T; //鎸囩ず鍣ㄦ暟緇?
typedef struct
{
ub2 ub2_tname[100];
ub2 ub2_age[100];
} stdLen_T; //瀛楁闀垮害
t_std tstd[100]; //鏁扮粍鍙橀噺錛岀敤浜庢壒閲忔搷浣?
stdInd_T tstdInd;
stdLen_T tstdLen;
stdLen_T tstdRet;
t_std std;
鍚勫嚱鏁版暟鏄?
1錛庡垱寤篛CI鐜
sword OCIEnvCreate(
OCIEnv **envhpp, //OCI鐜鍙ユ焺鎸囬拡
ub4 mode, //鍒濆鍖栨ā寮忥細OCI_DEFAULT/OCI_THREADED 絳?
CONST dvoid *ctxp,
CONST dvoid *(*malicfp)(dvoid *ctxp,size_t size),
CONST dvoid *(ralocfp)(dvoid *ctxp,dvoid *memptr,size_t newsize),
CONST void *(*mfreefp)(dvoid *ctxp,dvoid *memptr),
Size_t xstramemsz,
Dvoid **usrmempp
)
eg :
swResult = OCIEnvCreate(&envhpp, OCI_DEFAULT, NULL, NULL, NULL, NULL, 0, NULL);
if(swResult != OCI_SUCCESS && swResult != OCI_SUCCESS_WITH_INFO)
return FALSE;
sword OCIInitialize (
ub4 mode,
CONST dvoid *ctxp,
CONST dvoid *(*malocfp) (/* dvoid *ctxp, size_t size _*/),
CONST dvoid *(*ralocfp) (/*_ dvoid *ctxp, dvoid *memptr, size_t newsize _*/),
CONST void (*mfreefp) (/*_ dvoid *ctxp, dvoid *memptr _*/)
);
sword OCIEnvInit (
OCIEnv **envhpp,
ub4 mode,
size_t xtramemsz,
dvoid **usrmempp
);
娉細
鍦?i浠ュ悗錛屽彲鐢∣CIEnvCreate涓涓嚱鏁板氨鍙互鍒濆鍖栫幆澧冧簡錛岀浉褰撲簬OCIInitialize+ OCIEnvInit
2錛庣敵璇?閲婃斁鍙ユ焺
sword OCIHandleAlloc(
CONST dvoid *parenth, //鏂扮敵璇峰彞鏌勭殑鐖跺彞鏌勶紝涓鑸負OCI鐜鍙ユ焺
Dvoid **hndlpp, //鐢寵鐨勬柊鍙ユ焺
Ub4 type, type, //鍙ユ焺綾誨瀷
Size_t xtramem_sz, //鐢寵鐨勫唴瀛樻暟
Dvoid **usrmempp //鐢寵鍒扮殑鍐呭瓨鍧楁寚閽?
)
娉細
涓鑸渶瑕佺敵璇風殑鍙ユ焺鏈夛細
鏈嶅姟鍣ㄥ彞鏌凮CIServer, 鍙ユ焺綾誨瀷OCI_HTYPE_SERVER
閿欒鍙ユ焺OCIError錛岀敤浜庢崟鑾稯CI閿欒淇℃伅, 鍙ユ焺綾誨瀷OCI_HTYPE_ERROR
浜嬪姟鍙ユ焺OCISession, 鍙ユ焺綾誨瀷OCI_HTYPE_SESSION
涓婁笅鏂囧彞鏌凮CISvcCtx, 鍙ユ焺綾誨瀷OCI_HTYPE_SVCCTX
SQL璇彞鍙ユ焺OCIStmt, 鍙ユ焺綾誨瀷OCI_HTYPE_STMT
eg: 鐢寵涓涓敊璇彞鏌凮CIError
swResult = OCIHandleAlloc(envhpp, (dvoid *)& errhp, OCI_HTYPE_ERROR, 0, NULL);
if(swResult != OCI_SUCCESS && swResult != OCI_SUCCESS_WITH_INFO)
{
return FALSE;
}
閲婃斁鍙ユ焺
sword OCIHandleFree(
dvoid *hndlp, //瑕侀噴鏀劇殑鍙ユ焺
ub4 type //鍙ユ焺綾誨瀷
)
eg:
OCIHandleFree(stmtp, OCI_HTYPE_STMT)
3錛庤鍙?璁劇疆鍙ユ焺灞炴?
sword OCIAttrSet(
dvoid *trgthndlp, //闇璁劇疆鐨勫彞鏌勫悕
ub4 trghndltyp, //鍙ユ焺綾誨瀷
dvoid *attributep, //璁劇疆鐨勫睘鎬у悕
ub4 size, //灞炴у奸暱搴?
ub4 attrtype, //灞炴х被鍨?
OCIError *errhp //閿欒鍙ユ焺
)
娉細涓鑸璁劇疆鐨勫睘鎬ф湁錛?
鏈嶅姟鍣ㄥ疄渚嬶細
鍙ユ焺綾誨瀷OCI_HTYPE_SVCCTX錛屽睘鎬х被鍨婳CI_ATTR_SERVER
榪炴帴鏁版嵁鐨勭敤鎴峰悕錛?
鍙ユ焺綾誨瀷OCI_HTYPE_SESSION錛屽睘鎬х被鍨婳CI_ATTR_USERNAME
鐢ㄦ埛瀵嗙爜
鍙ユ焺綾誨瀷OCI_HTYPE_SESSION錛屽睘鎬х被鍨婳CI_ATTR_PASSWORD
浜嬪姟錛?
鍙ユ焺綾誨瀷OCI_HTYPE_SVCCTX錛屽睘鎬х被鍨婳CI_ATTR_SESSION
eg:璁劇疆鐢ㄦ埛鍚嶅拰瀵嗙爜
char username[20],passwd[20];
strcpy(username,鈥漷iger鈥?
strcpy(passwd,鈥漜otton鈥?
swResult = OCIAttrSet(usrhp, OCI_HTYPE_SESSION, (text*) username, strlen(username),
OCI_ATTR_USERNAME, errhp);
if(swResult != OCI_SUCCESS && swResult != OCI_SUCCESS_WITH_INFO)
return FALSE;
swResult = OCIAttrSet(usrhp, OCI_HTYPE_SESSION, (text*) passwd, strlen(passwd),
OCI_ATTR_PASSWORD, errhp);
if(swResult != OCI_SUCCESS && swResult != OCI_SUCCESS_WITH_INFO)
return FALSE;
sword OCIAttrGet(
dvoid *trgthndlp, //闇璇誨彇鐨勫彞鏌勫悕
ub4 trghndltyp, //鍙ユ焺綾誨瀷
dvoid *attributep, //璇誨彇鐨勫睘鎬у悕
ub4 *sizep, //灞炴у奸暱搴?
ub4 attrtype, //灞炴х被鍨?
OCIError *errhp //閿欒鍙ユ焺
)
4錛庤繛鎺?鏂紑鏈嶅姟鍣?
澶氱敤鎴鋒柟寮忚繛鎺ワ細
sword OCIServerAttach(
OCIServer *srvhp,//鏈垵濮嬪寲鐨勬湇鍔″櫒鍙ユ焺
OCIError *errhp,
CONST text *dblink,//鏈嶅姟鍣⊿ID
sb4 dblink_len,
ub4 mode //=OCI_DEFAULT,緋葷粺鐜?yōu)畣璁句负闃诲鏂瑰?
);
sword OCIServerDetach (
OCIServer *srvhp,
OCIError *errhp,
ub4 mode //OCI_DEFAULT
);
鍗曠敤鎴鋒柟寮忚繛鎺ワ細
sword OCILogon (
OCIEnv *envhp,
OCIError *errhp,
OCISvcCtx **svchp,
CONST text *username,
ub4 uname_len,
CONST text *password,
ub4 passwd_len,
CONST text *dbname,
ub4 dbname_len
);
sword OCILogoff (
OCISvcCtx *svchp
OCIError *errhp
);
5錛庡紑濮?緇撴潫涓涓細璇?
鍏堣璇佺敤鎴峰啀寤虹珛涓涓細璇濊繛鎺?
sword OCISessionBegin (
OCISvcCtx *svchp, //鏈嶅姟鐜鍙ユ焺
OCIError *errhp,
OCISession *usrhp, //鐢ㄦ埛浼氳瘽鍙ユ焺
ub4 credt, //璁よ瘉綾誨瀷
ub4 mode //鎿嶄綔妯″紡
);
*璁よ瘉綾誨瀷錛?
OCI_CRED_RDBMS:鐢ㄦ暟鎹簱鐢ㄦ埛鍚嶅拰瀵嗙爜榪涜璁よ瘉錛屽垯鍏堣璁劇疆OCI_ATTR_USERNAME鍜孫CI_ATTR_PASSWORD灞炴?
OCI_CRED_EXT:澶栭儴璁よ瘉錛屼笉闇瑕佽緗敤鎴峰拰瀵嗙爜
OCI_DEFAULT錛氱敤鎴蜂細璇濈幆澧冨彧鑳借鎸囧畾鐨勬湇鍔″櫒鐜鍙ユ焺鎵璁劇疆
OCI_SYSDBA錛氱敤鎴瘋鍏鋒湁sysdba鏉冮檺
OCI_SYSOPER錛氱敤鎴瘋鍏鋒湁sysoper鏉冮檺
Eg:
swResult = OCISessionBegin(svchp, errh,usrhp, OCI_CRED_RDBMS, OCI_DEFAULT);
if(swResult != OCI_SUCCESS && swResult != OCI_SUCCESS_WITH_INFO)
return FALSE;
sword OCISessionEnd (
OCISvcCtx *svchp,
OCIError *errhp,
OCISession *usrhp,
ub4 mode );
6錛庤鍙栭敊璇俊鎭?
sword OCIErrorGet (
dvoid *hndlp, //閿欒鍙ユ焺
ub4 recordno,//浠庨偅閲岃鍙栭敊璇褰曪紝浠?寮濮?
text *sqlstate,//宸插彇娑堬紝=NULL
sb4 *errcodep, //閿欒鍙?
text *bufp, //閿欒鍐呭
ub4 bufsiz, //bufp闀垮害
ub4 type //浼犻掔殑閿欒鍙ユ焺綾誨瀷
=OCI_HTYPE_ERROR:閿欒鍙ユ焺
=OCI_HTYPE_ENV錛氱幆澧冨彞鏌?
);
eg:
ub4 ub4RecordNo = 1;
OCIError* hError
sb4 sb4ErrorCode;
char sErrorMsg[1024];
if (OCIErrorGet(hError, ub4RecordNo++, NULL, &sb4ErrorCode, (OraText*) sErrorMsg, sizeof(sErrorMsg), OCI_HTYPE_ERROR) == OCI_SUCCESS)
printf(鈥渆rror msg:%s\n鈥? sErrorMsg);
7錛庡噯澶嘢QL璇彞
sword OCIStmtPrepare (
OCIStmt *stmtp,//璇彞鍙ユ焺
OCIError *errhp,
CONST text *stmt, //SQL璇彞
ub4 stmt_len, //璇彞闀垮害
ub4 language, //璇彞鐨勮娉曟牸寮?OCI_NTV_SYNTAX
ub4 mode //=OCI_DEFAULT
);
eg:
char sSQL[1024];
sprintf(sSQL, 鈥渟elect table_name from user_tables鈥?;
swResult = OCIStmtPrepare(stmtp errhp, (CONST OraText*)sSQL, strlen(sSQL), OCI_NTV_SYNTAX, OCI_DEFAULT);
if(swResult != OCI_SUCCESS && swResult != OCI_SUCCESS_WITH_INFO)
return FALSE;
8錛?緇戝畾杈撳叆鍙傛暟
OCIBindArrayOfStruct() Set skip parameters for static array bind 錛屾暟緇勭粦瀹氾紝涓鑸敤浜庢壒閲忔搷浣?
OCIBindByName() Bind by name 鎸夊悕緇戝畾
OCIBindByPos() Bind by position 鎸変綅緗粦瀹?寤鴻涓鑸寜姝ゆ柟寮忕粦瀹?
OCIBindDynamic() Sets additional attributes after bind with OCI_DATA_AT_EXEC mode
OCIBindObject() Set additional attributes for bind of named data type
娉細
OCIBindArrayOfStruct蹇呴』鍏堢敤OCIBindByPos鍒濆鍖栵紝鐒跺悗鍦∣CIBindArrayOfStruct涓畾涔夋瘡涓弬鏁版墍璺寵繃鐨勫瓧鑺傛暟銆?
濡傦細
瀛樺偍鏂瑰紡錛?
絎竴鏉¤褰曠浜屾潯璁板綍 N
SkipPara(瀹為檯灝辨槸緇撴瀯浣撻暱搴︼紝鍗蟲湰嬈℃墍鏈夊垪鐨勯暱搴﹀拰)
sword OCIBindByName (
OCIStmt *stmtp, //璇彞鍙ユ焺
OCIBind **bindpp,//緇撳悎鍙ユ焺,=NULL
OCIError *errhp,
CONST text *placeholder,//鍗犱綅絎﹀悕縐?
sb4 placeh_len, //鍗犱綅絎﹂暱搴?
dvoid *valuep, //緇戝畾鐨勫彉閲忓悕
sb4 value_sz, //緇戝畾鐨勫彉閲忓悕闀垮害
ub2 dty, //緇戝畾鐨勭被鍨?
dvoid *indp, //鎸囩ず絎﹀彉閲忔寚閽?sb2綾誨瀷),鍗曟潯緇戝畾鏃朵負NULL,
ub2 *alenp, //璇存槑鎵ц鍓嶅悗琚粨鍚堢殑鏁扮粍鍙橀噺涓悇鍏冪礌鏁版嵁瀹為檯鐨勯暱搴︼紝鍗曟潯緇戝畾鏃朵負NULL
ub2 *rcodep,//鍒楃駭榪斿洖鐮佹暟鎹寚閽堬紝鍗曟潯緇戝畾鏃朵負NULL
ub4 maxarr_len, //鏈澶氱殑璁板綍鏁?濡傛灉鏄崟鏉$粦瀹氾紝鍒欎負0
ub4 *curelep, //瀹為檯鐨勮褰曟暟,鍗曟潯緇戝畾鍒欎負NULL
ub4 mode //=OCI_DEFAULT
);
sword OCIBindByPos ( OCIStmt *stmtp,
OCIBind **bindpp,
OCIError *errhp,
ub4 position,// 緇戝畾鐨勪綅緗?
dvoid *valuep,
sb4 value_sz,
ub2 dty,
dvoid *indp,
ub2 *alenp,
ub2 *rcodep,
ub4 maxarr_len,
ub4 *curelep,
ub4 mode );
sword OCIBindArrayOfStruct (
OCIBind *bindp,//緇戝畾鐨勭粨鏋勫彞鏌?鐢監(jiān)CIBindByPos瀹氫箟
OCIError *errhp,
ub4 pvskip, //涓嬩竴鍒楄煩榪囩殑瀛楄妭鏁?*
ub4 indskip,//涓嬩竴涓寚紺哄櫒鎴栨暟緇勮煩榪囩殑瀛楄妭鏁?
ub4 alskip, //涓嬩竴涓疄闄呭艱煩榪囩殑瀛楄妭鏁?
ub4 rcskip //涓嬩竴涓垪綰ц繑鍥炲艱煩榪囩殑瀛楄妭鏁?
);
渚嬶細
sword swResult;
OCIBind* hBind;
Ub4 rec_num;
Sql: insert into student values (:p1,:p2)
鍗曟潯緇戝畾錛?
hBind = NULL;
swResult = OCIBindByPos(stmtp &hBind, errhp,1,ststd.tname,
sizeof(ststd.tname), SQLT_CHR, NULL,
NULL,NULL,0, NULL, OCI_DEFAULT);
鎵歸噺鍙栨暟鎹紝涓嬈″彇100鏉?
Sql: select username,age from student where username=:p1 and age=:p2
hBind = NULL;
swResult = OCIBindByPos(stmtp &hBind, errhp,1,tstd[0].tname,
sizeof(tstd[0].tname), SQLT_CHR, &tstdInd.sb2_usernmae[0],
&tstdLen.ub2_username[0],&tstdRet.ub2_username[0],100, &rec_num, OCI_DEFAULT);
swResult = OCIBindArrayOfStruct(hBind, errhp,sizeof(tstd [0]), sizeof(sb2), sizeof(ub2), sizeof(ub2));
9錛庢墽琛孲QL璇彞
sword OCIStmtExecute (
OCISvcCtx *svchp, //鏈嶅姟鐜鍙ユ焺
OCIStmt *stmtp, //璇彞鍙ユ焺
OCIError *errhp,
ub4 iters, // **
ub4 rowoff, //**
CONST OCISnapshot *snap_in,
OCISnapshot *snap_out,
ub4 mode //**
);
**娉細
1. iters:瀵逛簬select璇彞錛屽畠璇存槑涓嬈℃墽琛岃鍙栧埌buffer涓殑璁板綍琛屾暟錛屽鏋滀笉鑳界‘瀹歴elect璇彞鎵榪斿洖鐨勮鏁幫紝鍙皢iters璁劇疆涓?,鑰屽浜庡叾浠栫殑璇彞錛宨ters琛ㄧず榪欎簺璇彞鐨勬墽琛屾鏁幫紝姝ゆ椂iters涓嶈兘涓?銆?
2. rowoff:鍦ㄥ琛屾墽琛屾椂錛岃鍙傛暟琛ㄧず浠庢墍緇撳悎鐨勬暟鎹彉閲忎腑鐨勭鍑犳潯璁板綍寮濮嬫墽琛?鍗寵褰曞亸縐婚噺)銆?
3. mode錛?OCI_DEFAULT:default妯″紡
=OCI_DESCRIBE_ONLY錛氭弿榪版ā寮忥紝鍙繑鍥為夋嫨鍒楄〃鐨勬弿榪頒俊鎭紝鑰屼笉鎵ц璇彞
=OCI_COMMIT_ON_SUCCESS錛氳嚜鍔ㄦ彁浜ゆā寮忥紝褰撴墽琛屾垚鍔熷悗錛岃嚜鍔ㄦ彁浜ゃ?
=OCI_EXACT_FETCH:綺劇‘鎻愬彇妯″紡銆?
=OCI_BATCH_ERRORS錛?
鎵歸敊璇墽琛屾ā寮忥細鐢ㄤ簬鎵ц鏁扮粍鏂瑰紡鐨勬搷浣滐紝鍦ㄦ妯″紡涓嬶紝鎵歸噺insert ,update,delete鏃訛紝鎵ц榪囩▼涓換浣曚竴鏉¤褰曢敊璇笉浼氬鑷存暣涓?
insert ,update,delete澶辮觸錛岀郴緇熻嚜鍔ㄤ細鏀墮泦閿欒淇℃伅錛岃屽湪闈炴壒閿欒鏂瑰紡涓嬶紝鍏朵腑鐨勪換浣曚竴鏉¤褰曢敊璇紝灝嗕細瀵艱嚧鏁翠釜鎿嶄綔澶辮觸銆?
Eg:
鎵ц涓嬈?
swResult = OCIStmtExecute(svchp, stmtp, errhp錛?
1, 0, NULL, NULL, OCI_DEFAULT);
鎵歸噺鎵ц100嬈★細
swResult = OCIStmtExecute(svchp, stmtp, errhp錛?
100, 0, NULL, NULL, OCI_DEFAULT);
10錛庡畾涔夎緭鍑哄彉閲?
OCIDefineArrayOfStruct() Set additional attributes for static array define
OCIDefineByPos() Define an output variable association
OCIDefineDynamic() Sets additional attributes for define in OCI_DYNAMIC_FETCH mode
OCIDefineObject() Set additional attributes for define of named data type
sword OCIDefineByPos (
OCIStmt *stmtp, //璇彞鍙ユ焺
OCIDefine **defnpp,//瀹氫箟鍙ユ焺鈥旂敤浜庢暟緇勫彉閲?
OCIError *errhp,
ub4 position,//浣嶇疆搴忓彿(浠? 寮濮?
dvoid *valuep, //杈撳嚭鐨勫彉閲忓悕
sb4 value_sz, //鍙橀噺闀垮害
ub2 dty, //鏁版嵁綾誨瀷
dvoid *indp, //鎸囩ず鍣ㄥ彉閲?鎸囩ず鍣ㄥ彉閲忔暟緇勶紝濡傛灉姝ゅ瓧孌靛彲鑳藉瓨鍦ㄧ┖鍊鹼紝鍒欒鎸囩ず鍣ㄥ彉閲忥紝鍚﹀垯鍗曟潯澶勭悊鏃朵負NULL
ub2 *rlenp, //鎻愬彇鐨勬暟鎹暱搴?
ub2 *rcodep, //鍒楃駭榪斿洖鐮佹暟緇勬寚閽?
ub4 mode //OCI_DEFAULT
);
sword OCIDefineArrayOfStruct (
OCIDefine *defnp,//鐢監(jiān)CIDefineByPos瀹氫箟鐨勫彞鏌?
OCIError *errhp,
ub4 pvskip, //涓嬩竴鍒楄煩榪囩殑瀛楄妭鏁?涓鑸氨鏄粨鏋勭殑澶у皬
ub4 indskip,//涓嬩竴涓寚紺哄櫒鎴栫粨鏋勮煩榪囩殑瀛楄妭鏁?=0
ub4 rlskip, //涓嬩竴涓疄闄呭艱煩榪囩殑瀛楄妭鏁?=0
ub4 rcskip //涓嬩竴涓垪鍒楃駭榪斿洖鍊艱煩榪囩殑瀛楄妭鏁?=0
);
sword OCIDefineDynamic (
OCIDefine *defnp,
OCIError *errhp,
dvoid *octxp,
OCICallbackDefine (ocbfp)(/*_
dvoid *octxp,
OCIDefine *defnp,
ub4 iter,
dvoid **bufpp,
ub4 **alenpp,
ub1 *piecep,
dvoid **indpp,
ub2 **rcodep _*/) );
sword OCIDefineObject ( OCIDefine *defnp,
OCIError *errhp,
CONST OCIType *type,
dvoid **pgvpp,
ub4 *pvszsp,
dvoid **indpp,
ub4 *indszp );
eg:
鍗曟潯鏌ヨ
sql: select username,age from student where username=:p1;
濡傛灉姝ゅ瓧孌墊湁鍙兘鏈夌┖鍊鹼紝鍒?
hDefine = NULL;
swResult = OCIDefineByPos(stmtp &hDefine, errhp, 1, tstd.username, sizeof(tstd.username), SQLT_CHR, & sb2aInd[0], NULL, NULL, OCI_DEFAULT);
濡傛灉姝ゅ瓧孌墊病鏈夌┖鍊鹼紝鍒?
hDefine = NULL;
swResult = OCIDefineByPos(stmtp &hDefine, errhp, 1, tstd.username, sizeof(tstd.username), SQLT_CHR, NULL, NULL, NULL, OCI_DEFAULT);
鎵歸噺鏌ヨ
select username,age from student where age>30;
hDefine = NULL;
swResult = OCIDefineByPos(stmtp, &hDefine, errhp, 1, &tstd[0].username,
sizeof(tstd[0].usenmae), SQLT_CHR, NULL, NULL, NULL, OCI_DEFAULT);
swResult = OCIDefineArrayOfStruct(hDefine, errhp, sizeof(tstd[0]), 0, 0, 0);
11錛庢彁鍙栫粨鏋?
sword OCIStmtFetch (
OCIStmt *stmtp,//璇彞鍙ユ焺
OCIError *errhp,
ub4 nrows, //浠庡綋鍓嶄綅緗寮濮嬩竴嬈℃彁鍙栫殑璁板綍鏁幫紝瀵逛簬鏁版嵁鍙橀噺錛屽彲浠?gt;1,鍚﹀垯涓嶈兘>1
ub2 orientation,//鎻愬彇鐨勬柟鍚戯細OCI_FETCH_NEXT
ub4 mode //OCI_DEFAULT
)
eg
while ((swResult=OCIStmtFetch stmtp errhp,1,OCI_FETCH_NEXT,OCI_DEFAULT)) != OCI_NO_DATA)
{
鈥︹?
}
12錛庝簨鍔℃搷浣?
寮濮嬩竴涓簨鍔?
sword OCITransStart (
OCISvcCtx *svchp,
OCIError *errhp,
uword timeout, //**
ub4 flags );
**娉細
1錛?Timeout:
褰揻lag=OCI_TRANS_RESUME:瀹冭〃紺鴻繕鏈夊灝戠浜嬪姟灝嗚嬋媧?
=OCI_TRANS_NEW: 浜嬪姟鍝嶅簲鐨勮秴鏃舵椂闂?縐?
2錛?Flags:鎸囧畾涓涓柊鐨勪簨鍔¤繕鏄凡鏈変簨鍔?
=OCI_TRANS_NEW錛氬畾涔変竴涓柊鐨勪簨鍔?
=OCI_TRANS_RESUME
鍑嗗涓涓簨鍔★細
sword OCITransPrepare (
OCISvcCtx *svchp,
OCIError *errhp,
ub4 flags );//OCI_DEFAULT
sword OCITransForget (
OCISvcCtx *svchp,
OCIError *errhp,
ub4 flags );//OCI_DEFAULT
鏂紑涓涓簨鍔★細
sword OCITransDetach (
OCISvcCtx *svchp,
OCIError *errhp,
ub4 flags );//OCI_DEFAULT
鎻愪氦涓涓簨鍔★細
sword OCITransCommit (
OCISvcCtx *svchp, //鏈嶅姟鐜鍙ユ焺
OCIError *errhp,
ub4 flags ); //OCI_DEFAULT
鍥炴粴涓涓簨鍔?
sword OCITransRollback (
dvoid *svchp,
OCIError *errhp,
ub4 flags ); //OCI_DEFAULT
鍥涳紟 OCI鏁版嵁綾誨瀷涓嶤璇█鏁版嵁綾誨瀷瀵圭収琛?
琛ㄥ瓧孌電被鍨?銆銆銆銆銆OCI綾誨瀷 C綾誨瀷 澶囨敞
Number(N) SQLT_UIN 銆int 鏃犵鍙鋒暣鍨?
Number(N) SQLT_INT 銆int 鏈夌鍙鋒暣鍨?
Number(n,m) SQLT_FLT 銆float 絎︾偣鏁?
Varchar2(N) Sqlt_chr銆銆Char 瀛楃涓?
Raw(N) 銆銆Sqlt_BIN 鍏蜂綋鐪嬩笉鍚岀殑瀹氫箟 浜岃繘鍒剁被鍨嬶紝澶氱敤浜庝竴涓粨鏋勫瓧孌?
DATE SQLT_DAT 鏃?鏈濂借漿鎹㈡垚瀛楃涓叉垨鏁板瓧
]]>
鎴戝垰寮濮嬪涔燗ctiveX寮鍙?浣跨敤MFC銆傛垜瀵笰ctiveX鎺т歡鏂板涓涓悕涓?Caption",綾誨瀷涓篿nt鐨勫睘鎬?鎴戝湪ActiveX鐨勫睘鎬ч〉涓婃柊澧炰竴涓狤dit control,鎯抽氳繃璇dit control鏉ョ洿鎺ヨ緗?Caption"灞炴х殑鍊?
鐜板湪闂鏉ヤ簡:
鍦╒C6.0涓紑鍙戞椂鍙互閫氳繃class wizard鐨?澧炲姞鎴愬憳鍙橀噺"鏉ョ洿鎺ュ皢璇dit control涓?Caption"灞炴у叧鑱?鐢熸垚鐨勪唬鐮佸湪DoDataExchange鏂規(guī)硶涓涓?
void CCircPropPage::DoDataExchange(CDataExchange* pDX)
{
//{{AFX_DATA_MAP(CCircPropPage)
DDP_Text(pDX, IDC_CAPTION, m_caption, _T("Caption") );//(1)
DDX_Text(pDX, IDC_CAPTION, m_caption);
//}}AFX_DATA_MAP
DDP_PostProcessing(pDX);
}
鍏朵腑(1)琛岀殑鏈涓涓弬鏁?_T("Caption") ,灝辨槸璇dit control鎵鍏寵仈鐨勫睘鎬у悕.
浣?
鍦╒C++ 2005涓?鍗存病鏈夌洿鎺ュ皢Edit control涓庡睘鎬х浉鍏寵仈鐨勫姛鑳?鍦╒C++ 2005涓湪Edit
control涓婂彸鍑?閫夋嫨"娣誨姞鍙橀噺",鎵撳紑"娣誨姞鎴愬憳鍙橀噺鍚戝",浣嗚鍚戝鍙兘娣誨姞涓嶦dit
control鍏寵仈鐨?鎴愬憳鍙橀噺",鏃犳硶灝嗚Edit control 涓?Caption"灞炴у叧鑱?VC++ 2005鐢熸垚鐨勪唬鐮佸涓?
void CCircPropPage::DoDataExchange(CDataExchange* pDX)
{
//{{AFX_DATA_MAP(CCircPropPage)
//DDP_Text(pDX, IDC_CAPTION, m_caption, _T("Caption") );//(1)//榪欐槸VC6鐢熸垚鐨勪唬鐮侊紝榪欓噷鐣欎綔鍙傜収
//DDX_Text(pDX, IDC_CAPTION, m_caption);//榪欎篃鏄疺C6鐢熸垚鐨?br />//}}AFX_DATA_MAP
DDP_PostProcessing(pDX); //(2)
DDX_Text(pDX, IDC_CAPTION1, m_caption1);//<--(3) VC++浜х敓鐨勪唬鐮?
}
鍏?
涓(3)琛屼負VC++
2005浜х敓鐨勪唬鐮?瀹冨茍娌℃湁璋冪敤DDP_緋誨垪鐨勫嚱鏁?涔熷皢浠g爜鏀懼湪浜咥FX_DATA_MAP瀹忕殑澶栭潰銆佺(2)琛岀殑涓嬮潰(絎?琛屽嚱鏁扮殑鍔熻兘涓?緇撴潫灞?
鎬у間笌Control鐨勮漿鎹?,涔熷氨鏄VC++ 2005騫舵病鏈夊皢Edit control涓庡睘鎬у叧鑱旂殑鍔熻兘!??
铏界劧鍙互閫氳繃鎵嬪姩娣誨姞鏂瑰紡瑙e喅,浣嗘垜鎬昏寰梀C++ 2005搴旇鎻愪緵濡傛鍔熻兘,涓嶇煡閬撴湁娌℃湁鏈嬪弸閬囧埌榪囦笌鎴戠浉鍚岀殑闂,濡備綍瑙e喅涔?
闅鵑亾錛屾濡傚埆浜烘墍璇達紝VC2005姣擵C6鏄竴涓姝ャ?br />
]]>
1錛夊湪澶存枃浠?DrawView.h)涓0鏄庢秷鎭搷搴斿嚱鏁板師鍨嬨?br />//{{AFX_MSG(CDrawView) //娉ㄩ噴瀹?br />afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
//}}AFX_MSG //娉ㄩ噴瀹?br />璇存槑錛?br />鍦ㄦ敞閲婂畯涔嬮棿鐨勫0鏄庡湪VC涓伆鑹叉樉紺恒俛fx_msg瀹忚〃紺哄0鏄庣殑鏄竴涓秷鎭搷搴斿嚱鏁般?
瑕佷簡銆傛柊鐨勫睘鎬ч〉鑳藉鑷姩鍒嗘瀽浣犵殑浠g爜錛屼負浣犳坊鍔犳垨鑰呭垹闄や唬鐮侊紝鑰屾棤闇浠涔堢壒孌婃爣璁扮殑甯繖銆?br />鍥犳娉ㄩ噴瀹忓凡緇忔槸鍘嗗彶浜х墿浜嗐?/p>
//}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()
璇存槑錛?br />鍦ㄥ畯BEGIN_MESSAGE_MAP()涓嶦ND_MESSAGE_MAP()涔嬮棿榪涜娑堟伅鏄犲皠銆?br />瀹廜N_WM_LBUTTONDOWN()鎶婃秷鎭疻M_LBUTTONDOWN涓庡畠鐨勫搷搴斿嚱鏁癘nLButtonDown錛堬級鐩稿叧鑱斻傝繖鏍蜂竴鏃︽湁娑堟伅鐨勪駭鐢燂紝灝變細鑷姩璋冪敤鐩稿叧鑱旂殑娑堟伅鍝嶅簲鍑芥暟鍘誨鐞嗐?br />瀹廜N_WM_LBUTTONDOWN()瀹氫箟濡備笅錛?br />#define ON_WM_LBUTTONDOWN()
{ WM_LBUTTONDOWN, 0, 0, 0, AfxSig_vwp,
(AFX_PMSG)(AFX_PMSGW)(void (AFX_MSG_CALL CWnd::*)(UINT, CPoint))&OnLButtonDown },
3錛夋簮鏂囦歡涓繘琛屾秷鎭搷搴斿嚱鏁板鐞嗐傦紙DrawView.cpp涓嚜鍔ㄧ敓鎴怬nLButtonDown鍑芥暟杞粨錛屽涓嬶級
void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CView::OnLButtonDown(nFlags, point);
}
璇存槑錛?br />鍙褰撳鍔犱竴涓秷鎭搷搴斿鐞嗭紝鍦ㄤ互涓婁笁澶勮繘琛屼簡淇敼銆傚彲鍦ㄦ秷鎭搷搴斿嚱鏁伴噷娣誨姞娑堟伅澶勭悊浠g爜瀹屾垚瀵規(guī)秷鎭殑鍝嶅簲銆佸鐞嗐?/p>
virtual BOOL OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult);
]]>
鍙戣〃涓婚: 鐢╳xDb錛圤DBC錛夎繛鎺xcel sheet
紕板埌涓椿瑕佽鍙朎xcel鏂囦歡涓殑鏁版嵁錛屾悳浜嗕竴涓婨xcel鏈塐DBC椹卞姩鍙互浣跨敤錛岀宸xWidgets鍙堟湁ODBC妯″潡錛岀湡鏄彲浠ョ渷鎺変笉灝戜簨鎯呫傛湰浠ヤ負鍙互杞繪澗鎼炲畾錛屼笉鏂欎竴鐩存病鏈夎兘榪炴帴涓婏紝閮侀椃浜嗕竴闃靛瓙錛屽悗鏉ュ湪RTFS鐨勫師鍒欎笅緇堜簬璋冭瘯鍑猴紝鍘熸潵鏄痺xDb鐨勪竴涓猙ug,淇鍜屾彁浜atch鍚庯紝闂瑙e喅銆?
bug submission:
https://sourceforge.net/tracker/?func=detail&atid=309863&aid=1494705&group_id=9863
浣跨敤鑼冧緥錛?
wxString s = wxT("DRIVER={Microsoft Excel Driver (*.xls)};DSN='''';DBQ=")+filename;
wxDbConnectInf dbi;
dbi.SetConnectionStr(s);
dbi.AllocHenv();
db = new wxDb(dbi.GetHenv());
db->Open(&dbi);//this line failed if not patched
鍦ㄥ悗闈㈡彁鍙栨暟鎹殑鏃跺欙紝闇瑕佹彁渚泃able鍚嶅瓧錛孍xcel姣旇緝鐗規(guī)畩錛屼笉鏄洿瑙傜殑鍏崇郴鍨嬫暟鎹簱閭f牱鍙互鐪嬪埌table鐨勫瓨鍦ㄣ傛柟娉曟槸錛?
閫夊畾鏁版嵁鍖哄煙,鑿滃崟->鎻掑叆->鍚嶇О->瀹氫箟,閲岄潰杈撳叆鐨勫悕瀛楀氨鏄痶able鍚嶇О銆?
鎻愬彇table鐨勪緥瀛愶細
if(db->TableExists(wxT("ryzl"))){
UWORD n;
wxDbColInf *cols = db->GetColumns(wxT("ryzl"),&n);
if(cols == NULL){
wxMessageBox(wxT("no no get"));
}else{
wxMessageBox(wxString::Format(wxT("we got %d"),(int)n));
}
}else{
wxMessageBox(wxT("table ryzl not exists"));
}
]]>
wxDb *PodDB = NULL; // 瀹氫箟鏁版嵁搴撹繛鎺ユ寚閽圖atabase connection
wxDbTable *table = NULL; // 瀹氫箟鏁版嵁琛ㄦ寚閽圖ata table to access
if(!DB->Open(wxT("DRIVER=Microsoft Access Driver (*.mdb);DBQ=D:\\pod.mdb;UID=admin;"),DBfailOnDataTypeUnsupported))//浣跨敤椹卞姩紼嬪簭鐨勬柟寮忔墦寮鏁版嵁搴?br />{
if (PodDB->IsOpen())
{
// Connection is open, but the initialization of
// datatypes and parameter settings failed
return 0;
}
else
{
// Error opening datasource
//return HandleError(wxT("DB ENV ERROR: Cannot allocate ODBC env handle"));
return 0;
}
}
const wxString tableName = wxT("POD"); //瀹氫箟瑕佹搷浣滅殑琛ㄧ殑鍚嶇О
const UWORD numTableColumns = 8; //鎸囧嚭POD琛ㄤ腑鐨勫垪鏁幫紙columns錛?br />//寤虹珛鍒拌〃鐨勮繛鎺?br />table = new wxDbTable(PodDB, tableName, numTableColumns, wxT(""), wxDB_QUERY_ONLY, wxT(""));
wxStrcpy(pPodPictureInfo->Title, wxT(""));
......
......
{
//An error occurred opening (setting up) the table"));
}
table->SetWhereClause(wxT("Pod_When = '1982'"));
table->SetOrderByClause(wxT("Pod_Date"));
{
return HandleError(wxT("QUERY ERROR: "), table->GetDb());
//return 0;
}
wxString msg; // Used for display messages
msg.Printf(wxT("Row #% lu --\nTitle : %s\nPodDate : %s\nWhere : %s\nWhen : %s\nWho : %s\nDisc : %s\nRelated : %s\nPhotoName :%s"),
table->GetRowNum(),
pPodPictureInfo->Title,
pPodPictureInfo->PodDate,
pPodPictureInfo->Where,
pPodPictureInfo->When,
pPodPictureInfo->Who,
pPodPictureInfo->Disc,
pPodPictureInfo->Related,
pPodPictureInfo->PhotoName
);
//媯鏌ヨ〃鎿嶄綔/鐜板疄鑾峰彇鐨凱OD淇℃伅
//wxSafeShowMessage(wxT("Pod_wxDbTable Test"),msg);
}
------琛ュ厖涓鐐?-----
struct PodPictrueInfo
{
wxChar Title[100];
......
]]>
]]>