| ²é¿´: 137 | »Ø¸´: 0 | |||
| µ±Ç°Ö÷ÌâÒѾ´æµµ¡£ | |||
miRNAÖÁ×ðľ³æ (Ö°Òµ×÷¼Ò)
Ë®ÍõÖ®Íõ£¨ÓÞÓÞѧ԰¹ÜÀíÔ±£©
|
[½»Á÷]
C++/CLIʵս¡ª¡ªHELLO
|
||
|
ÎÄÕÂÀ´Ô´£ºÌ켫 ʲôÊÇC++/CLI? ¡¡¡¡C++/CLIÃè»æµÄÊÇÒ»ÖÖ¶àÔª×éºÏ£¬´Ë´¦µÄ C++ µ±È»ÊÇÖ¸ Bjarne Stroustrup ÔÚ Bell ʵÑéÊÒ·¢Ã÷µÄC++±à³ÌÓïÑÔ¡£ËüÖ§³ÖËٶȺÍÖ´ÐÐ ÎļþµÄ´óС¶¼µÃµ½ÓÅ»¯µÄ¾²Ì¬¶ÔÏóÄ£ÐÍ¡£µ«³ýÁ˶ÑÄÚ´æ·ÖÅäÒÔÍ⣬Ëü²»Ö§³ÖÔËÐÐʱ³ÌÐò¶Ô¶ÔÏóµÄ¸ü¸Ä¡£ËüÔÊÐí¶Ôµ×²ã»úÆ÷½øÐÐÎÞÏÞÖÆµÄ·ÃÎÊ£¬µ«¶ÔÓÚÕýÔÚÔËÐеijÌÐòÖеĻÀàÐÍ¡¢ÒÔ¼°Ïà¹ØµÄ³ÌÐò»ù´¡¹¹Ô죬ËüµÄ·ÃÎÊÄÜÁ¦È´·Ç³£ÓÐÏÞ¡¢»òÕ߸ù±¾¾Í²»¿ÉÄÜ¡£ÎÒÔÚ΢ÈíµÄͬÊ Herb Sutter£¬Ò²ÊÇC++/CLIµÄÖ÷¼Ü¹¹Ê¦£¬ÈÏΪC++ÊÇÒ»¸ö»ìÄýÍÁÓïÑÔ¡£ ¡¡¡¡¡°CLI¡±¼´¹«¹²ÓïÑÔ»ù´¡½á¹¹£¨Common Language Infrastructure£©£¬ÕâÊÇÒ»¸öÖ§³Ö¶¯Ì¬×é¼þ±à³ÌÄ£Ð͵Ķà²ã¼Ü¹¹¡£ÔÚÐí¶à·½Ã棬ËüËù±íʾµÄ¶ÔÏóÄ£ÐͺÍC++µÄÍêÈ«Ïà·´¡£ËüÊÇÒ»¸öÔËÐÐʱÈí¼þ²ã £¬Ò»¸öÐéÄâÖ´ÐÐϵͳ£¬ÔËÐÐÔÚÓ¦ÓóÌÐòºÍµ×²ã²Ù×÷ϵͳ֮¼ä¡£¶Ôµ×²ã»úÆ÷µÄ·ÃÎÊÊܵ½Ï൱ÑϸñµÄÏÞÖÆ¡£Ö§³Ö¶ÔÔËÐÐÖгÌÐòµÄ»î¶¯ÀàÐÍÒÔ¼°¹ØÁª³ÌÐòµÄ»ù´¡¹¹Ôì ½øÐдæÈ¡¡ª¡ª·¢Ïֺͽ¨¹¹¡£Ð±Ïß¡°/¡±±íʾ C++ ºÍ CLI Ö®¼äµÄÒ»Öְ󶨣¨binding£©£¬ÓйØÕâÖְ󶨵Äϸ½Ú¹¹³É±¾×¨À¸µÄ³£¹æÖ÷Ìâ¡£ ¡¡¡¡ËùÒÔ£¬¶ÔÓÚ¡°Ê²Ã´ÊÇC++/CLI£¿¡±Õâ¸öÎÊÌâµÚÒ»¸ö×î½üËÆµÄ´ð°¸ÊÇ£ºËüÊǾ²Ì¬C++¶ÔÏóÄ£Ð͵½¶¯Ì¬CLI×é¼þ¶ÔÏóÄ£Ð͵ÄÒ»Öְ󶨣¬ ¼òÑÔÖ®£¬Ëü¾ÍÊÇÄãÈçºÎÓÃC++½øÐÐ.NET±à³Ì£¬¶ø²»ÊÇÓÃC#»òVisual Basic.NET¡£ÏóC#ºÍCLI×Ô¼ºÒ»Ñù£¬C++/CLIÕýÔÚ¾Àú ECMA£¨Å·ÖÞ¼ÆËã»úÖÆÔìÉÌлᣩ ±ê×¼»¯²¢×îÖÕÒª¾ÀúISO±ê×¼ÈÏÖ¤¡£ ¡¡¡¡¹«¹²ÓïÑÔÔËÐÐʱ£¨CLR£©ÊÇ΢Èí°æµÄCLI£¬×¨ÃÅÓÃÓÚ Windows ²Ù×÷ϵͳ£¬Í¬Ñù£¬Visual C++ 2005ÊÇC++/CLI µÄʵÏÖ¡£ ¡¡¡¡µÚ¶þ¸ö½üËÆ´ð°¸ÊÇ£ºÎÒ¾õµÃC++/CLIÔÚC++ÄÚ¼¯³É.NET±à³ÌÄ£ÐÍÓëÒÔǰ±´¶ûʵÑéÊÒÔÚµ±Ê±µÄC++ÖÐÓÃÄ£°å¼¯³É·ºÐͱà³ÌÒ»ÑùÓÐÒìÇúͬ¹¤Ö®´¦¡£Á½ÖÖÇé¿öÖУ¬ÄãÔÚÏÖÓÐC++´úÂë¿âÉϵÄͶ×ÊÒÔ¼°ÄãÏÖÓеÄC++רҵ¼¼Êõ¶¼µÃµ½±£»¤¡£ÕâÊÇC++/CLIÉè¼ÆµÄÒ»¸ö»ù±¾ ÒªÇó¡£ ¡¡¡¡Ñ§Ï°C++/CLI ¡¡¡¡Ò»ÖÖC++/CLIÓïÑÔµÄÉè¼ÆÓÐÈý¸ö²ãÃæ£¬ÕâÈý¸ö²ãÃæÒ²ÊÊÓÃÓÚËùÓÐÓïÑÔ£ºÓïÑÔ²ãÓï·¨µ½¹«¹²ÀàÐÍϵͳ£¨CTS£© µÄÓ³É䣻ѡÔñΪ³ÌÐòÔ±Ö±½Ó²Ù×÷¶ø¹«¿ªµÄµ×²ãCLI»ù±¾×éÖ¯½á¹¹ µÄÏêϸ³Ì¶È£»ÒÔ¼°Ñ¡ÔñÒªÌṩµÄ³¬Ô½CLIÖ±½ÓÖ§³ÖµÄ¸½¼Ó¹¦ÄÜ¡£ ¡¡¡¡µÚÒ»¸ö²ãÃæÊÇËùÓÐCLIÓïÑÔÔںܴó³Ì¶ÈÉ϶¼¹²Óеģ¬µÚ¶þ¸ö²ãÃæºÍµÚÈý²ãÃæÊÇijһCLIÓïÑÔÇø±ðÓÚÆäËüÓïÑԵĵط½¡£¸ù¾ÝËùÒª½â¾öµÄÎÊÌ⣬Äã¿ÉÒÔÑ¡Ôñijһ ÖÖÓïÑÔ£¬Ò²¿ÉÒÔ½«¶àÖÖCLIÓïÑÔ½áºÏÆðÀ´¡£Ñ§Ï°C++/CLIÓïÑÔÐèÒªÕÆÎÕÕâÈý¸öÉè¼Æ²ãÃæ¡£ ¡¡¡¡ÔõÑù½«C++/CLI Ó³Éäµ½CTS£¿ ¡¡¡¡Á˽âµ×²ãCTS ¶ÔѧϰC++/CLI·Ç³£ÓаïÖú£¬ËüÖ÷Òª°üÀ¨Èý¸ö³£¹æÀàÀàÐÍ£º ¡¡¡¡¶à̬ÒýÓÃÀàÐÍ£¬ÆäÓÃÓÚËùÓеÄÀà¼Ì³Ð£» ¡¡¡¡·Ç¶àֵ̬ÀàÐÍ£¬ÆäÓÃÓÚʵÏÖÐèÒªÔËÐÐʱЧÂʵľßÌåÀàÐÍ£¬ÈçÊý×ÖÀàÐÍ£» ¡¡¡¡³éÏó½Ó¿ÚÀàÐÍ£¬ÆäÓÃÓÚ¶¨ÒåÒ»¸öʵÏָýӿڵÄÒ»×éÒýÓÃÀàÐÍ»òÖµÀàÐ͹²Í¬Ê¹ÓõĹ«¹²²Ù×÷¼¯£» ¡¡¡¡ÔÚÉè¼Æ·½Ã棬ËäÈ»CTSµ½Ò»×éÄÚÖõÄÓïÑÔÀàÐ͵ÄÓ³Éä¶ÔÓÚËùÓÐCLIÓïÑÔÀ´Ëµ¶¼Êǹ²Í¬µÄ£¬µ±È»£¬Ã¿Ò»ÖÖCLIÓïÑÔµÄÓï·¨¸÷²»Ïàͬ¡£ÀýÈ磬ÔÚC#ÖУ¬ÎÒÃÇ¿ÉÒÔ ÕâÑùÀ´¶¨ÒåÒ»¸ö³éÏó»ùÀà Shape£¬´ÓÕâ¸öÀàÅÉÉúÌØ¶¨µÄ¼¸ºÎÄ£ÐͶÔÏó¡£ abstract class Shape { ... } // C# ¡¡¡¡¶øÔÚC++/CLIÖУ¬¿ÉÒÔÏóÏÂÃæÕâÑùд£¬ÒÔ±íʾÍêÈ«ÏàͬµÄµ×²ãÒýÓÃÀàÐÍ£º ref class Shape abstract { ... }; // C++/CLI ¡¡¡¡Ôڵײã IL£¨ÖмäÓïÑÔ£©ÖУ¬ÒÔÉÏÁ½ÖÖÉùÃ÷ÒÔÍêÈ«ÏàͬµÄ·½Ê½±íʾ¡£Í¬Ñù£¬ÔÚC#ÖУ¬ÎÒÃÇ¿ÉÒÔÓÃÏÂÃæµÄ´úÂëÀ´¶¨ÒåÒ»¸ö¾ßÌåµÄ Point2D Àà £º struct Point2D { ... } // C# ¡¡¡¡¶øÔÚC++/CLIÖÐд³É£º value class Point2D { ... }; // C++/CLI ¡¡¡¡½èÖú C++/CLI Ö§³ÖµÄÀàÀàÐͼÒ×å±íÏÖÁËÒ»ÖÖ±¾»ú·½Ê½µÄ CTS ¼¯³É¡£ËüÈ·¶¨ÁËÄãµÄÓ﷨ѡÔñ£¬ÀýÈ磺 class native {}; value class V {}; ref class R {}; interface class I {}; ¡¡¡¡CTS Ò²Ö§³Öö¾ÙÀàÀàÐÍ£¬ÆäÐÐΪ·½Ê½Óë±¾»úö¾ÙÉÔ΢ÓÐÐ©Çø±ð£¬C++/CLI¶Ô¶þÕß¶¼Ìṩ֧³Ö£º enum native { fail, pass }; enum class CLIEnum : char { fail, pass}; ¡¡¡¡Í¬Ñù£¬CTSÖ§³ÖÆä×Ô¼ºµÄÊý×éÀàÐÍ£¬ÆäÐÐΪҲÓë±¾»úÊý×éÀàÐÍÓÐÒ»¶¨²î±ð£¬Î¢ÈíͬÑù¶Ô¶þÕßÌṩ֧³Ö£º int native[] = { 1,1,2,3,5,8 }; array£¼int£¾^ managed = { 1,1,2,3,5,8 }; ¡¡¡¡ÄÇÖÖÈÏΪÈκÎÒ»ÖÖ CLI ÓïÑÔ±ÈÁíÒ»ÖÖÓïÑÔ¸ü½Ó½ü»ò¼¸ºõ¾ÍÊǵ½µ×²ãCLIµÄÓ³ÉäÊDz»¾«È·µÄ¡£Ïà·´£¬Ã¿Ò»ÖÖCLIÓïÑÔ¶¼Ö»ÊDZí´ïÁË×Ô¼º¶Ôµ×²ãCLI¶ÔÏóÄ£Ð͵ÄÒ»ÖÖ ¼û½â¡£ÔÚÏÂÒ»½ÚÄ㽫¸üÇå³þµØ¿´µ½ÕâÒ»µã¡£ ¡¡¡¡CLI µÄϸ½Ú±ê×¼ ¡¡¡¡ÔÚÉè¼ÆCLIÓïÑÔʱ±ØÐ뿼Âǵĵڶþ¸öÉè¼Æ²ãÃæÊÇÒª½«Ê²Ã´³Ì¶ÈµÄµ×²ãCLIʵÏÖÄ£ÐͽáºÏµ½¸ÃÓïÑÔÖС£Õâ¸öÓïÑÔ½â¾öʲôÑùµÄÎÊÌ⣿Ҫ½â¾öÕâЩÎÊÌâ±ØÐëҪʲôÑùµÄ¹¤¾ß£¿ ´ËÍ⣬¸ÃÓïÑԺܿÉÄÜÎüÒýÄÄÒ»Àà³ÌÐòÔ±£¿ ¡¡¡¡ÏÂÃæ£¬ÎÒÃÇÀûÓ÷¢ÉúÔÚÍйܶÑÖеÄÖµÀàÐÍÎÊÌâ¡£ÔÚÐí¶àÇé¿öÏ£¬ÖµÀàÐÍ¿ÉÒÔÔÚÍйܶÑÖÐÕÒµ½×Ô¼º£º ¡¡¡¡Í¨¹ýÒþʽµÄ¿òÈë/¿ò³ö²Ù×÷£¨boxing£©¡ª¡ªµ±ÖµÀàÐ͵Äij¸öʵÀý±»¸³Öµ¸øÒ»¶ÔÏóʱ£¬»òÕßͨ¹ýij¸öδ±»¸ÄдµÄÖµÀàÐ͵÷ÓÃÒ»¸öÐéÄâ·½·¨Ê±£» ¡¡¡¡µ±ÖµÀàÐͱ»µ±×÷ΪÒýÓÃÀàÀàÐ͵ijÉԱʱ£» ¡¡¡¡µ±ÖµÀàÐͱ»µ±×÷CLIÊý×éÔªËØ´æ´¢Ê±£» ¡¡¡¡ÊÇ·ñÔÊÐí³ÌÐòÔ±´¦ÀíÕâÖÖÖµÀàÐ͵ØÖ·ÊÇÉè¼ÆCLIÓïÑÔʱ±ØÐëÒª½â¾öµÄÎÊÌâ¡£ ¡¡¡¡´æÔÚµÄÎÊÌâ? ¡¡¡¡Î»ÓÚÍйܶÑÖеÄÈκζÔÏóÔÚÀ¬»ø»ØÊÕÆ÷½øÐÐÇåɨÊÕËõµÄ¹ý³ÌÖж¼ÓпÉÄÜÔâÓöÖØÐ·ÖÅ䣬ָÏòÕâЩ¶ÔÏóµÄÈκÎÖ¸Õë±ØÐë±»×·×Ù²¢ÔÚÔËÐÐʱµÃµ½¸üУ¬¶ø³ÌÐòÔ± ÎÞ·¨×Ô¼ºÊÖ¶¯×·×ÙËüÃÇ£¬Òò´Ë£¬Èç¹ûÄã±»ÔÊÐíÓÃij¸ö¿ÉÄÜÔÚÍйܶÑÖеÄÖµÀàÐ͵ĵØÖ·£¬ÄÇô³ýÁ˱¾»úÖ¸ÕëÍ⣬»¹ÐèÒªÒ»¸ö×·×ÙÐÎ̬µÄÖ¸Õë¡£ ¡¡¡¡µ½µ×¸ÃÔõÑùȥȨºâÄØ£¿Ò»·½Ã棬ÐèÒª¿¼ÂǼò½àºÍ°²È«¡£Ö±½ÓÒýÈë¶ÔÒ»¸ö»òÒ»×é×·×ÙÖ¸ÕëµÄÖ§³Ö»áʹÓïÑÔ±äµÃ¸ü¸´ÔÓ¡£Èç¹û²»ÌṩÕâÖÖÖ§³Ö£¬ÓÉÓÚËùÐèµÄ¸´Ôӳ̶ȽµµÍ£¬´Ó¶ø¿ÉÒÔÕÒµ½µÄ³ÌÐòÔ±ÈËȺ¾Í»áÔö¼Ó¡£´ËÍ⣬ÔÊÐí³ÌÐòÔ±·ÃÎÊÕâЩÉúÃüÆÚ¶ÌÔݵÄÖµÀàÐÍ£¬ÔòÔö¼ÓÁ˳ÌÐòÔ±³ö´íµÄ¿ÉÄÜÐÔ¡£Ëý¾Òâ»ò²»¾ÒâµØ¶ÔÄÚ´æ×öһЩΣÏÕ¶¯×÷¡£²»Ö§³Ö×·×ÙÖ¸Õ룬¿ÉÒÔDZÔڵش´½¨½Ï°²È«µÄÔËÐÐʱ»·¾³¡£ ¡¡¡¡ÁíÒ»·½Ã棬±ØÐ뿼ÂÇЧÂʺÍÁé»îÐÔ¡£Ã¿´Î½«ÖµÀàÐ͸³Öµ¸øÏàͬµÄ¶ÔÏ󣬸ÃÖµ¶¼»á·¢ÉúеĿòÈë/¿ò³ö²Ù×÷¡£ÔÊÐí·ÃÎÊÕâÖÖ¾¹ý¿òÈë/¿ò³ö²Ù×÷µÄÖµÀàÐÍ £¬¾ÍÔÊÐíÔÚÄÚ´æÖнøÐиüвÙ×÷£¬ÕâÑù±ã¿ÉÄÜÌá¹©ÖØÒªµÄÐÔÄܸĽø¡£Ã»ÓÐijÖÖÐÎʽµÄ×·×ÙÖ¸Õ룬Ä㽫ÎÞ·¨ÓÃÖ¸ÕëËã·¨±éÀúCLIÊý×飬ÕâÒâζ×ÅCLIÊý×齫²»ÄÜ ÈÚÈëSTL£¨±ê׼ģ°å¿â£©Öеĵü´úÆ÷ģʽ£¬Ò²ÎÞ·¨Óë·ºÐÍËã·¨Ðͬ¹¤×÷¡£ÔÊÐí·ÃÎÊ¿òÈë/¿ò³öÖµÀàÐͽ«»á´ó´óÌá¸ßÉè¼ÆµÄÁé»îÐÔ¡£ ¡¡¡¡ÔÚC++/CLI ÖУ¬Î¢ÈíÑ¡ÔñÌṩһϵÁÐÔÚÍйܶÑÖд¦ÀíÖµÀàÐ͵ÄѰַģʽ£º int ival = 1024; int^ boxedi = ival; array£¼int£¾^ ia = gcnew array£¼int£¾; interior_ptr£¼int£¾ begin = &ia[0]; value struct smallInt { int m_ival; ... } si; pin_ptr£¼int£¾ ppi = &si.m_ival; ¡¡¡¡µäÐ굀 C++/CLI ¿ª·¢ÈËÔ±ÊÇÒ»¸ö¾Ñé·á¸»µÄϵͳ³ÌÐòÔ±£¬ÆäÈÎÎñÊÇÌṩµ×²ã¼Ü¹¹ÒÔ¼°×÷Ϊ»ù´¡µÄºËÐÄÓ¦Óã¬ÒÔ´ËΪ»ù´¡À´¹¹½¨Î´À´¡£Ëý±ØÐë½â¾ö¿ÉÉìËõÐÔºÍÐÔÄÜÏà¹ØµÄÎÊÌ⣬²¢ÇÒ±ØÐë´Óϵͳһ¼¶À´¿´´ýµ×²ã CLI¡£Ä³ÖÖ CLI ÓïÑÔµÄϸ½Ú±ê×¼·´Ó³ÁËÆä³ÌÐòÔ±µÄÃæÃ²¡£ ¡¡¡¡¸´ÔÓÐÔ±¾Éí²¢²»ÊǶÔÖÊÁ¿µÄ·ñ¶¨£¬ÈËÀàÉúÃü±Èµ¥ºËϸ°û¸´Ôӵö࣬Õ⵱Ȼ²»ÊÇÒ»¼þ»µÊ£¬È»¶ø£¬µ±µ¥Ò»¸ÅÄîµÄ±í´ï±äµÃ¸´ÔÓ»¯ÒÔºó£¬Õâ³£³£±»ÈÏΪÊÇÒ»¼þ»µÊ¡£ÔÚC++/CLIÖУ¬CLI¿ª·¢ÍŶÓÒѾ ³¢ÊÔÌṩһÖÖÓÅÑŵķ½Ê½À´±í´ïÒ»¸ö¸´ÔÓµÄÖ÷Ìå¡£ ¡¡¡¡¸½¼Ó¹¦ÄÜ ¡¡¡¡µÚÈý¸öÉè¼Æ²ãÃæÊÇÌØ¶¨ÓïÑԲ㹦ÄÜÒª³¬¹ý±»CLIÖ±½ÓÖ§³ÖµÄ¹¦ÄÜ£¬ÕâÑù¾ÍÐèÒª½¨Á¢Ò»ÖÖÓïÑÔ²ãÖ§³ÖÓëCLIµ×²ãʵÏÖÄ£ÐÍÖ®¼äµÄÓ³Éä¡£ ÔÚijЩÇé¿öÏ£¬ÕâÊÇ×ö²»µ½µÄ£¬ÒòΪ¸ÃÓïÑÔÎÞ·¨µ÷½âCLIµÄÐÐΪ£¬ÔÚ»ùÀàµÄ¹¹Ô캯ÊýºÍÎö¹¹º¯ÊýÖнâ¾öÐ麯Êý±ãÊÇÀý×Ó¡£ÎªÁËÔÚÕâÖÖÇé¿öÖз´Ó³ISO-C++ÓïÒ壬ÐèÒªÔÚÿ¸ö»ùÀàµÄ¹¹Ô캯ÊýºÍÎö¹¹º¯ÊýÖÐ ÖØÐ°²ÅÅÐé±í¡£ÕâÊDz»¿ÉÄܵģ¬ÒòΪÐé±í²Ù×÷ÊÇÓÉÔËÐÐʱÍйܵ쬶ø·Çµ¥¶ÀµÄÓïÑÔÍйܡ£ Òò´Ë£¬ÕâÒ»Éè¼Æ²ãÃæÊÇÓÅÔ½ÐԺͿÉÐÐÐÔµÄÕÛÖС£C++/CLI ÌṩµÄ¸½¼Ó¹¦ÄÜÖ÷ÒªÓÐÈý¸ö·½Ã棺 ¡¡¡¡ÒýÓÃÀàÐ͵Ä×ÊÔ´»ñÈ¡£¨Resource Acquisition£©ÐÎʽÊÇInitialization£¨RAII£©£¬ ÓÈÆäÊÇΪ±»³Æ×÷Õ¼¾ÝÏ¡ÓÐ×ÊÔ´µÄÀ¬»ø»ØÊÕÀàÐÍÈ·¶¨ÐÔÖÕÖ¹»¯£¨deterministic finalization£©Ìṩһ¸ö×Ô¶¯»¯µÄ»úÖÆ£» ¡¡¡¡ÓëC++¿½±´¹¹Ô캯ÊýºÍ¿½±´¸³Öµ²Ù×÷·ûÏà¹ØµÄÉî¶È¿½±´ÓïÒåÐÎʽ£¬µ«Ëü²»ÄÜÀ©Õ¹µ½ÖµÀàÐÍ£» ¡¡¡¡³ýÁË CLI·ºÐÍ»úÖÆÖ®Í⡪¡ªÕâÔÀ´ÊÇÎÒµÚÒ»¸öרÀ¸µÄÖ÷Ì⣬»¹ÎªCTSÀàÐÍÌṩC++Ä£°åµÄÖ±½ÓÖ§³Ö£¬ÁíÍ⣬»¹ÌṩÓÃÓÚ CLI ÀàÐ굀 STL ¿ÉÑéÖ¤°æ±¾£» ¡¡¡¡ÈÃÎÒÃÇ¿´Ò»¸ö¼òµ¥µÄÀý×Ó£ºÈ·¶¨ÐÔÖÕÖ¹»¯ÎÊÌâ¡£Óë¶ÔÏó¹ØÁªµÄÄÚ´æ±»À¬»ø»ØÊÕÆ÷»ØÊÕ֮ǰ£¬Èô´æÔÚÓëÖ®Ïà¹ØÁ¬µÄ Finalize ·½·¨£¬¸Ã·½·¨½«»á±»µ÷Óá£Äã¿ÉÒÔ°Ñ ¸Ã·½·¨¿´×÷ÊÇÒ»ÖÖ³¬¼¶Îö¹¹º¯Êý£¬ÒòΪËü²»ÒÀÀµÓڸöÔÏó³ÌÐòµÄÉúÃüÆÚ£¬Ëü±»³ÆÎªÖÕÖ¹»¯¡£µ÷Óà Finalize ·½·¨µÄʱ¼ä£¬ÉõÖÁÊÇ·ñµ÷ÓÃËüÊÇ䶨ÒåµÄ¡£Õâ¾ÍÊÇÀ¬»ø»ØÊÕÆ÷²»È·¶¨µÄÖÕÖ¹»¯²Ù×÷º¬ÒåÖ®ËùÔÚ¡£ ¡¡¡¡²»È·¶¨ÐÔÖÕÖ¹»¯ÔÚ½øÐж¯Ì¬ÄÚ´æ¹ÜÀíʱ¿ÉÒÔºÜÓÐЧµØ¹¤×÷£¬µ±¿ÉÓÃÄÚ´æ¿Õ¼äÑÏÖØ²»×ãʱ£¬À¬»ø»ØÊÕÆ÷»á·¢»Ó×÷Óò¢½â¾öÎÊÌâ¡£µ«Êǵ±¶ÔÏóÉæ¼°µÄÊÇÄ³Ð©ÖØÒª×ÊÔ´£¬±ÈÈçÊý¾Ý¿âÁ¬½Ó¡¢Ä³ÖÖ ÀàÐ͵ÄËø¡¢±¾µØ¶ÑÄÚ´æÊ±£¬²»È·¶¨ÐÔÖÕÖ¹»¯µÄ±íÏÖÈ´²»¾¡ÈËÒâ¡£ÔÚÕâÖÖÇé¿öÏ£¬×îºÃÊǾ¡¿ìÊͷŲ»ÔÙÐèÒªµÄ×ÊÔ´¡£Ä¿Ç°CLI²ÉÓõĽâ¾ö°ì·¨ÊÇ£ºÄ³¸öÀàÔÚÆä IDisposable ½Ó¿ÚµÄ Dispose ·½·¨ÖÐÊÍ·Å×ÊÔ´£¬ÕâÀïµÄÎÊÌâÊÇ Dispose ÐèÒªÏÔʽµ÷Óã¬Òò´ËËü²»¿ÉÄܱ»Ö´ÐС£ ¡¡¡¡C++µÄ»ù±¾Éè¼ÆÄ£Ê½ÊÇǰÊöµÄ×ÊÔ´»ñÈ¡£¨Resource Acquisition £©¼´³õʼ»¯£¨Initialization£©£¬ËüÒâζ×ÅÀàͨ¹ý¹¹Ô캯Êý »ñÈ¡×ÊÔ´£¬Ïà·´£¬Í¨¹ýÎö¹¹º¯ÊýÀ´ÊÍ·Å×ÊÔ´¡£ÔÚÀà¶ÔÏóµÄÉú´æÆÚÄÚÊÇ×Ô¶¯¹ÜÀíµÄ¡£ ¡¡¡¡ÒÔÏÂÊÇÒýÓÃÀàÐÍÊÍ·Å×ÊÔ´µÄ¹ý³Ì£º ¡¡¡¡ÓÃÎö¹¹º¯ÊýѹËõÔÚÊÍ·Å×ÊÔ´¹ý³ÌÖбØÐëµÄ´úÂ룻 ¡¡¡¡×Ô¶¯µ÷Óð󶨵½Àà¶ÔÏóÉú´æÆÚµÄÎö¹¹º¯Êý£» ¡¡¡¡CLIÖУ¬ÒýÓÃÀàÐ͵ÄÀàûÓÐÀàÎö¹¹µÄ¸ÅÄÒò´Ë£¬Îö¹¹º¯Êý±»Ó³Éäµ½µ×²ãʵÏÖÖÐÁíÍâµÄ¶«Î÷ÉÏ£¬±àÒëÆ÷ÔòÔÚÄÚ²¿Íê³ÉÈçÏÂת»»£º Àà¾ß±¸Æä»ùÀàÁÐ±í£¬´Ó½Ó¿Ú IDisposable ÑÓÉì¼Ì³Ð£» ¡¡¡¡Îö¹¹º¯Êý±»×ª»»³ÉIDisposable µÄ Dispose ·½·¨£» ¡¡¡¡Õâ½ö½öÍê³ÉÁËÒ»°ë£¬»¹ÐèÒªÒ»ÖÖÎö¹¹º¯ÊýµÄ×Ô¶¯µ÷ÓÃ;¾¶¡£Ö§³ÖÒýÓÃÀàÐÍרÓõĻùÓÚ¶ÑÕ»µÄ·ûºÅ£¬Ò²¾ÍÊÇ˵ÆäÉúÃüÆÚÓëÆäÉùÃ÷µÄ·¶Î§Ïà¹ØÁª¡£±àÒëÆ÷ ÔÚÄÚ²¿×ª»»·ûºÅ£¬ÔÚÍйܶÑÖзÖÅäÒýÓöÔÏó¡£Ëæ×Å·¶Î§µÄÖÕÖ¹£¬±àÒëÆ÷²åÈëÒ»¸ö¶Ô Dispose ·½·¨µÄµ÷Ó᪡ªÓû§¶¨ÒåµÄÎö¹¹º¯Êý¡£Óë¸Ã¶ÔÏó¹ØÁªµÄʵ¼ÊÄÚ´æµÄ»ØÊÕÈÔÈ»ÔÚÀ¬»ø»ØÊÕÆ÷µÄÕÆ¿ØÖ®Ï¡£ÀýÈçÈç Figure 1 Ëùʾ¡£ ¡¡¡¡C++/CLI ²»½ö½öÊÇC++µ½¹ÜÀíÊÀ½çµÄÀ©Õ¹£¬Ïà·´£¬Ëü±íÏÖÁËÒ»ÖÖÍêÈ«µÄ±à³Ì·¶Àý£¬ÀàËÆÓÚÔçÆÚ¶àÖØ¼Ì³ÐºÍ·ºÐͱà³Ì·¶Àý¼¯³Éµ½¸ÃÓïÑÔÒ»Ñù£¬ÎÒÈÏΪÕâ¸öÍŶÓÍê³ÉÁËÒ»Ïî½Ü³öµÄ¹¤×÷¡£ ¡¡¡¡ÄÇô£¬ÄãÊÇÈçºÎ¿´´ý C++/CLI µÄÄØ? ¡¡¡¡C++/CLI´ú±íÁ˱¾µØºÍÍйܱà³ÌµÄ×ۺϣ¬ÔÚÕâ¸ö·´¸´¹ý³ÌÖУ¬ÕâÖÖ×ÛºÏͨ¹ý¼´¶ÀÁ¢¶øÓÖµÈͬµÄÔ´Âë¼¶ºÍ¶þ½øÖÆÔªËع²Í¬ÌåÀ´Íê³É£¬°üÀ¨»ìºÏģʽ£¨±¾»úºÍCTSÀàÐ͵ÄÔ´Âë¼¶»ìºÏ£¬ÒÔ¼°±¾»úºÍCIL¶ÔÏóÎļþµÄ¶þ½øÖÆ»ìºÏ£©£¬ ±¾µØÀàÐͺÍCTSÀàÐ͵ĻìºÏ£¬ÐÂÔöÁË»ìºÏ±¾µØ¶ÔÏóºÍCIL¶ÔÏóµÄ¶þ½øÖÆÎļþ£©£¬´¿Ä£Ê½£¨±¾»úºÍCTSÀàÐ͵ÄÔ´Âë¼¶»ìºÏ£¬ËùÓбàÒë¹ýµÄ CIL ¶ÔÏóÎļþ£©£¬±¾»úÀࣨ½öͨ¹ýרÃŵİü×°Àà²Å¿ÉÒÔ²Ù¿Ø CTS ÀàÐÍ£©£¬ÒÔ¼° CTS ÀֻࣨÄÜÒÔÖ¸ÕëÐÎʽ²Ù¿Ø±¾»úÀàÐÍ£©¡£ ¡¡¡¡µ±È»£¬C++/CLI ³ÌÐòÔ±Ò²¿ÉÒÔÑ¡Ôñµ¥¶ÀÓà CLI ÀàÐÍÀ´±à³Ì£¬ÔÚÕâÖÖ·½Ê½ÖÐÌṩÄܱ»¼ÄË޵ĿÉÑéÖ¤´úÂ룬±ÈÈç SQL Server 2005 ÖеĴ洢¹ý³Ì¡£ ¡¡¡¡ÏÖÔÚ£¬»Øµ½Ê²Ã´ÊÇ C++/CLI µÄÎÊÌ⣬ËüÊǽøÈë.NET±à³ÌÄ£Ð͵ĵÚÒ»µÀÃż÷£¬ÓÐÁË C++/CLI£¬Äã²»½ö¾ß±¸ÁËÇ¨ÒÆ C++ Ô´´úÂë¿âµÄ;¾¶£¬Í¬Ê±»¹¿ÉÒÔÇ¨ÒÆ C++ רҵ¼¼Êõ¡£ÕâÈÃÎҸоõ·Ç³£ã«Òâ¡£ [ Last edited by »ÃÓ°ÎÞºÛ on 2006-10-3 at 14:06 ] |
» ²ÂÄãϲ»¶
¿ÒÇëÓÐѧУÊÕÁô
ÒѾÓÐ6È˻ظ´
Çóµ÷¼ÁÍÆ¼ö
ÒѾÓÐ8È˻ظ´
0854Çóµ÷¼Á
ÒѾÓÐ14È˻ظ´
300Çóµ÷¼Á
ÒѾÓÐ9È˻ظ´
291Çóµ÷¼Á
ÒѾÓÐ7È˻ظ´
289 ·Ö105500ҩѧר˶Çóµ÷¼Á(ÕÒBÇøÑ§Ð£)
ÒѾÓÐ4È˻ظ´
³õÊÔ324 ÖÐҩѧ Ò»Ö¾Ô¸ÌìÖÐÒ½ Çóµ÷¼Á
ÒѾÓÐ3È˻ظ´
ҩѧÇóµ÷¼Á
ÒѾÓÐ14È˻ظ´
327Çóµ÷¼Á
ÒѾÓÐ27È˻ظ´
¼±Ðèµ÷¼Á
ÒѾÓÐ5È˻ظ´














»Ø¸´´ËÂ¥