¸¶ÀÌÅ©·Î¼ÒÇÁÆ® IIS ¼¹ö ¶Ç´Â Win95 MS °³ÀÎ À¥ ¼¹ö¿¡¼ ´Ù¸¥ ½ºÅ©¸³Æ® ¿£ÁøÀ» ¼³Á¤ÇÏ´Â °Í°ú ¸¶Âù°¡Áö ¹æ½ÄÀ¸·Î ÆÄÀ̽ãÀ» ¼³Á¤ÇÕ´Ï´Ù.
regedt32¸¦ ½ÇÇàÇÏ½Ã°í ´ÙÀ½À¸·Î °¡¼¼¿ä:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ScriptMap
±×¸®°í ´ÙÀ½ÀÇ ¶óÀÎÀ» ÀÔ·ÂÇϼ¼¿ä (¿©·¯ºÐÀÇ ½Ã½ºÅÛÀÌ ÇÊ¿ä·Î ÇÏ´Â ¾î¶² ƯÁ¤ÇÑ º¯°æÀ» Çϼ¼¿ä)
.py :REG_SZ: c:\<path to python>\python.exe -u %s %s
ÀÌ ¶óÀÎÀ¸·Î ¿©·¯ºÐÀº ½ºÅ©¸³Æ®¸¦ °£´ÜÇÑ ÂüÁ¶·Î ´ÙÀ½°ú °°ÀÌ È£ÃâÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù: "½ºÅ©¸³Æ®"·Î ÁÖ¾îÁø http://yourserver/scripts/yourscript.py´Â ¿©·¯ºÐÀÇ ¼¹ö¿¡ ´ëÇÏ¿© "½ÇÇà°¡´É" µð·ºÅ丮°¡ µË´Ï´Ù. (º¸ÅëÀº À̰ÍÀÌ ±âº»ÀÔ´Ï´Ù). "-u" Ç÷¡±×´Â Ç¥ÁØÀԷ¿¡ ´ëÇÏ¿© ºñ¿ÏÃæ¸ðµå ±×¸®°í ÀÌÁø ¸ðµå¸¦ ÁöÁ¤ÇÕ´Ï´Ù - ÀÌÁø µ¥ÀÌŸ¿Í ÀÛ¾÷ÇÒ ¶§ ÇÊ¿äÇÕ´Ï´Ù
°Ô´Ù°¡, ÀÌ·¯ÇÑ ¹®¸Æ¿¡¼ »ç¿ëµÉ ¶§ ±× ÆÄÀÏ È®ÀåÀÚ¸¦ À§ÇÏ¿© ".py"¸¦ »ç¿ëÇÏ´Â °ÍÀº ÁÁÀº »ý°¢ÀÌ ¾Æ´Ï¶ó´Â °ÍÀ» ¾Æ´Â »ç¶÷µéÀº ±×°ÍÀ» ±ÇÀåÇÕ´Ï´Ù. (¿©·¯ºÐÀº *.py¸¦ Áö¿ø ¸ðµâÀ» À§ÇÏ¿© ¿¹¾àÇØµÎ°í *.cgi ¶Ç´Â *.cgp¸¦ "ÁÖ ÇÁ·Î±×·¥" ½ºÅ©¸³Æ®¸¦ »ç¿ëÇÏ°í ½ÍÀ» ¼öµµ ÀÖ½À´Ï´Ù). ±×·¸Áö¸¸, ±× ¹®Á¦´Â ÀÌ À©µµ¿ì FAQ Ç׸ñÀ» ¹þ¾î³ª´Â °ÍÀÔ´Ï´Ù.
³×Æ®½ºÄÉÀÌÇÁ ¼¹ö: ÀÌ ÁÖÁ¦¿¡ °üÇÑ Á¤º¸´Â ´ÙÀ½¿¡ Á¸ÀçÇÕ´Ï´Ù: http://home.netscape.com/comprod/server_central/support/fasttrack_man/programs.htm#1010870
("keypress"¸¦ Ž»öÇÏ¿© À¯´Ð½º¸¦ À§ÇÑ ÇØ´äÀ» ã¾Æ º¸¼¼¿ä.)
essays/styleguide.html¾î¶² ¿¡µðÅÍ¿¡¼µµ Åǰú °ø¹éÀ» È¥¿ëÇÏ´Â °ÍÀº ÁÁÁö ¾ÊÀº »ý°¢ÀÔ´Ï´Ù. MSVC ¿ª½Ã ÀÌ·± °üÁ¡¿¡¼ º¸¸é ´Ù¸£Áö ¾Ê½À´Ï´Ù, ±×¸®°í ½±°Ô °ø¹éÀ» »ç¿ëÇϵµ·Ï ¼³Á¤µÇ¾î ÀÖ½À´Ï´Ù: Tools -> Options -> Tabs¸¦ ¼±ÅÃÇϽðí, ÆÄÀÏ Å¸ÀÔ "Default"¿¡ "ÅÇ Å©±â(Tab size)"¿Í "µé¿©¾²±â Å©±â(Indent size)"¸¦ 4·Î ¼³Á¤ÇϽðí, ±×¸®°í "°ø¹é »ðÀÔ(Insert spaces)" ¶óµð¿À ¹öưÀ» ¼±ÅÃÇϼ¼¿ä.
¾ÕÂÊÀÇ °ø¹é¿¡¼ Åǰú °ø¹éÀÇ È¥¿ëÀÌ ¹®Á¦¸¦ ÀÏÀ¸Å°´ÂÁö Àǽɵǽøé, ÆÄÀ̽ãÀ» -t ½ºÀ§Ä¡·Î ½ÇÇàÇϽôø°¡, Tools/Scripts/tabnanny.py¸¦ ½ÇÇà½ÃÄѼ Àϰýó¸® ¸ðµå·Î µð·ºÅ丮 Æ®¸®¸¦ Á¡°ËÇϼ¼¿ä. .
def kill(pid): """kill function for Win32""" import win32api handle = win32api.OpenProcess(1, 0, pid) return (0 != win32api.TerminateProcess(handle, 0))
>>> import os >>> os.path.isdir( '\\\\rorschach\\public') 0 >>> os.path.isdir( '\\\\rorschach\\public\\') 1[ºí·¹ÀÌÅ© À©Æ° (Blake Winton)ÀÇ ´ë´ä] °øÀ¯ µå¶óÀ̺êÀÇ µð·ºÅ丮¿¡¼ "Start >> Run"À» ¼öÇàÇÏ·Á°í ÇÒ ¶§ °°Àº ¹®Á¦°¡ ÀÖ¾ú½À´Ï´Ù. ¸¸¾à "\\rorschach\public"¸¦ »ç¿ëÇß´Ù¸é, ½ÇÆÐÇßÀ» °ÍÀÌÁö¸¸, \\rorschach\public\"¸¦ »ç¿ëÇϸé, ±×°ÍÀº ÀÛµ¿ÇÒ °ÍÀÔ´Ï´Ù. ±× ¹®Á¦¿¡ °üÇÏ¿©´Â, os.stat() ¿ª½Ã °°½À´Ï´Ù (ÀÚ, "\\\\rorschach\\public"¿¡ ´ëÇÏ¿© ¿¡·¯ ¸ÞÁöÁö¸¦ ³»Áö¸¸, ¿©·¯ºÐÀº ÀÌÇØÇÏ½Ç °Ì´Ï´Ù)...
ÀÌ·¯ÇÑ ÀÏÀÌ ÀϾ´Â °Í¿¡ °üÇÏ¿© ³ª¸§´ë·ÎÀÇ ÀÌ·ÐÀÌ ÀÖÁö¸¸, ±×°ÍÀº ´ÜÁö ÀÌ·ÐÀÏ »ÓÀÔ´Ï´Ù. NT °øÀ¯ µð·ºÅ丮, ±×¸®°í ÀϹÝÀûÀÎ µð·ºÅ丮 »çÀÌÀÇ Â÷À̸¦ ÀÌÇØÇØ¾ß ÇÕ´Ï´Ù. "\\rorschach\public"´Â µð·ºÅ丮°¡ ¾Æ´Ï¶ó, ±×°ÍÀº _½ÇÁ¦·Î´Â_ IPC¸¦ º»¶á °ÍÀÔ´Ï´Ù. À̰ÍÀº ÀÏÁ¾ÀÇ ¾çµµµÈ ½Å¿ëÀ¸·Î¼, ³×Æ®¿öÅ© µå¶óÀ̺긦 ¦Áþ±âÇÒ ¶§¿¡, "\\rorschach\public\utils"ÀÌ ¾Æ´Ï¶ó ¿À·ÎÁö "\\rorschach\public"À¸·Î¸¸ ¦ÁöÀ» ¼ö ÀÖ´Ù´Â »ç½Ç¿¡ ±Ù°ÅÇϰí ÀÖ½À´Ï´Ù.
[funkster@midwinter.comÀÇ ÇØ¼³] ±×°ÍÀº ½ÇÁ¦·Î´Â ÆÄÀ̽ãÀÇ ¹®Á¦°¡ ¾Æ´Õ´Ï´Ù, ÆÄÀ̽ãÀº Àß ÀÛµ¿ÇÕ´Ï´Ù; ´ÙÀ½Àº À©µµ¿ìÀÇ ³×Æ®¿öÅ© µå¶óÀ̺꿡 °üÇÏ¿© ¾à°£Àº È¥¶õ½º·¯¿î °ÍµéÀ» ±ú²ýÀÌ Á¤¸®Çϰí ÀÖ½À´Ï´Ù.
µå¶óÀÌºê ¹®ÀÚ Ã³·³ °øÀ¯ ¿äÁ¡À» »ý°¢ÇØ º¸¸é µµ¿òÀÌ µË´Ï´Ù. ¿¹Á¦:
k: µð·ºÅ丮°¡ ¾Æ´Ï´Ù k:\ µð·ºÅ丮ÀÌ´Ù k:\media µð·ºÅ丮ÀÌ´Ù k:\media\ µð·ºÅ丮°¡ ¾Æ´Ï´Ù"k:"¸¦ "\\conky\foo"·Î ´ëüÇÒ ¶§¿¡µµ °°Àº ±ÔÄ¢ÀÌ Àû¿ëµË´Ï´Ù:
\\conky\foo µð·ºÅ丮°¡ ¾Æ´Ï´Ù \\conky\foo\ µð·ºÅ丮ÀÌ´Ù \\conky\foo\media µð·ºÅ丮ÀÌ´Ù \\conky\foo\media\ µð·ºÅ丮°¡ ¾Æ´Ï´Ù
Á¦°¡ »ý°¢Çϱâ·Î À̰ÍÀº ±× ¾îÇø®ÄÉÀ̼ÇÀÌ Python15.DLL°ú´Â ´Ù¸¥ Á¾·ùÀÇ ÄÄÆÄÀÏ·¯ ±ê¹ß ¸ðµÒÀ¸·Î ÄÄÆÄÀÏ µÇ¾ú±â ¶§¹®¿¡ ¹ß»ýÇÕ´Ï´Ù.¾î¶² ÄÄÆÄÀÏ·¯ ±ê¹ßµéÀº Ç¥ÁØ I/O ¶óÀ̺귯¸®¿¡ ¿µÇâÀ» ¹ÌÄ¡´Â °ÍÀ¸·Î ÆÇ´ÜµÇ´Âµ¥ ±×·¯ÇÑ ¹æ½ÄÀ¸·Î ´Ù¸¥ ±ê¹ßÀ» »ç¿ëÇϸé È£ÃâÀ» ½ÇÆÐÇϵµ·Ï ¸¸µå´Â °Í °°½À´Ï´Ù. ±×°ÍÀ» ºñ-µð¹ö±× ´ÙÁß-¾²·¹µå DLL·Î ¼³Á¤ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù (¸í·É¾î ¶óÀο¡¼ /MD¸¦ ¼³Á¤Çϰųª, ÇÁ·ÎÁ§Æ® ¼³Á¤ÇÏ¿¡¼ MSVC¸¦ ÅëÇÏ¿© ¼³Á¤µÉ ¼ö ÀÖ½À´Ï´Ù -> C++/Code »ý¼º ±×¸®°í "Use rum-time library" ¼±ÅÃ.)
¶Ç ÁÖ¸ñÇÒ °ÍÀº µð¹ö±×¸¦ ¹èÆ÷ ¹öÀü¿¡ È¥ÇÕ-ÀÏÄ¡ÇÒ¼ö ¾ø´Ù´Â °ÍÀÔ´Ï´Ù. ¸¸¾à µð¹ö±× ´ÙÁß ¾²·¹µå DLLÀ» »ç¿ëÇϱ⸦ ¿øÇϽøé, ¸ðµâ¿¡´Â _¹Ýµå½Ã_ "_d"°¡ ±âº» À̸§¿¡ Ãß°¡µÇ¾ß ÇÕ´Ï´Ù.
ImportError: DLL load failed: One of the library files needed to run this application cannot be found. - ÀÌ ¾îÇø®ÄÉÀ̼ÇÀ» ½ÇÇàÇϴµ¥ ÇÊ¿äÇÑ ¶óÀ̺귯¸® ÆÄÀÏÁß Çϳª¸¦ ãÀ» ¼ö ¾ø½À´Ï´Ù.¾Æ¸¶µµ Tcl/Tk¸¦ ¼³Ä¡ÇÏÁö ¾Ê¾ÒÀ» ¼öµµ ÀÖ½À´Ï´Ù, ±×·¯³ª ºÐ¸íÈ÷ Tcl/Tk¸¦ ¼³Ä¡Çϼ̰í, ¿øÇÏ´Â ¾îÇø®ÄÉÀ̼ÇÀÌ Á¤È®ÇÏ°Ô ÀÛµ¿Çϸé, ¹®Á¦´Â ¾Æ¸¶µµ ¼³Ä¡±â°¡ autoexec.bat ÆÄÀÏÀ» Á¤È®ÇÏ°Ô ¼öÁ¤ÇÏÁö ¾Ê¾ÒÀ» ¼ö ÀÖ½À´Ï´Ù. ¼³Ä¡±â´Â PATH ȯ°æ º¯¼ö¸¦ Tcl/TkÀÇ 'bin' ÇϺεð·ºÅ丮¸¦ Æ÷ÇÔÇϵµ·Ï º¯°æÇÏ´Â ¹®ÀåÀ» Ãß°¡ÇÏ·Á°í ÇÕ´Ï´Ù, ±×·¯³ª ¶§·Î´Â ÀÌ ÆíÁýÀÌ Àß ÀÛµ¿ÇÏÁö ¾Ê½À´Ï´Ù. ³ëÆ®ÆÐµå·Î ±×°ÍÀ» ¿¾îº¸¸é ¹«¾ùÀÌ ¹®Á¦ÀÎÁö º¸ÅëÀº ¾Ë ¼ö ÀÖ½À´Ï´Ù.
(¶Ç ÇϳªÀÇ Ãß°¡ ÈùÆ®¶ó¸é, µ¥À̺ñµå ÀÚÇÁ¶õ½ºÅ°(David Szafranski)°¡ ÁöÀûÇÑ ¹Ù¿¡ ÀÇÇϸé: ¿©·¯ºÐÀº ¿©±â¿¡¼ ±ä ÆÄÀÏÀ̸§À» »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù; ¿¹¸¦ µé¾î. C:\Program Files\Tcl\bin ´ë½Å¿¡ C:\PROGRA~1\Tcl\binÀ» »ç¿ëÇϼ¼¿ä)
°£´ÜÈ÷ ³»·Á¹ÞÀº ÆÄÀÏÀ» È®ÀåÀÚ°¡ .TGZ°¡ µÇµµ·Ï ´Ù½Ã À̸§ÁöÀ¸¼¼¿ä, ±×·¯¸é WinZipÀÌ ±×°ÍÀ» ó¸®ÇÒ °ÍÀÔ´Ï´Ù. (¸¸¾à WinZipÀÌ ±×·¸°Ô ÇÏÁö ¸øÇϸé, ´õ »õ·Î¿î ¹öÀüÀ» ´ÙÀ½¿¡¼ ³»·Á ¹ÞÀ¸¼¼¿ä (http://www.winzip.com/.)
ÆÄÀ̽ã 1.5.* (python15.dll) DLLµéÀº ¸ðµÎ MS VC++ 5.0°ú multithreading-DLL ¼±ÅûçÇ×(¾Æ¸¶µµ, /MD)À¸·Î ÄÄÆÄÀÏ µË´Ï´Ù.
ÄÄÆÄÀÏ·¯ ȤÀº ±ê¹ßÀ» º¯°æÇÒ ¼ö ¾ø´Ù¸é, Py_RunSimpleString()À» »ç¿ëÇØ º¸¼¼¿ä. ÀÓÀÇÀÇ ÆÄÀÏÀ» ½ÇÇàÇϵµ·Ï ¸¸µå´Â ²Ä¼ö´Â ¿©·¯ºÐÀÇ ÆÄÀÏÀ̸§À» Àμö·Î ÁÖ¾î execfile()¸¦ È£ÃâÇϵµ·Ï ±¸¼ºÇÏ´Â °ÍÀÔ´Ï´Ù.
À©µµ¿ì¿¡¼ freeze¸¦ »ç¿ëÇÒ ¼ö´Â ÀÖÁö¸¸, ¼Ò½º¸¦ ³»·Á ¹Þ¾Æ¾ß¸¸ ÇÕ´Ï´Ù (http://www.python.org/download/download_source.html¸¦ ÂüÁ¶Çϼ¼¿ä). À̰ÍÀº ÆÄÀ̽ã 1.5.2 (±× ÀÌÈÄÀÇ ¹öÀü)¿¡¸¸ ±ÇÀåÇÕ´Ï´Ù; ´õ ¿À·¡µÈ ¹öÀüÀº Àß ÀÛµ¿ÇÏÁö ¾Ê½À´Ï´Ù.
¸¶ÀÌÅ©·Î¼ÒÇÁÆ® VC++ 5.0 ÄÄÆÄÀÏ·¯°¡ ÇÊ¿äÇÕ´Ï´Ù (¾Æ¸¶ 6.0¿¡µµ ¿ª½Ã ÀÛµ¿ÇÒ °ÍÀÔ´Ï´Ù). ÆÄÀ̽ãÀ» ±¸ÃàÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù -- ÇÁ·ÎÁ§Æ® ÆÄÀϵéÀº ¸ðµÎ PCbuild µð·ºÅ丮¿¡ Á¸ÀçÇÕ´Ï´Ù.
freeze ÇÁ·Î±×·¥Àº ±× ¼Ò½ºÆ®¸®ÀÇ Tools\freeze ÇϺεð·ºÅ丮¿¡ ÀÖ½À´Ï´Ù.
ÁÖ¸ñÇÒ °ÍÀº foo.pyd¿¡ ´ëÇÑ Å½»ö °æ·Î´Â PYTHONPATHÀ̸ç, À©µµ¿ì »ç¿ëÀÚ°¡ foo.dllÀ» Ž»öÇϱâ À§ÇÏ¿© »ç¿ëÇÏ´Â ±× °æ·Î¿Í´Â °°Áö ¾Ê´Ù´Â °ÍÀÔ´Ï´Ù. ¶ÇÇÑ, foo.pyd´Â ÇÁ·Î±×·¥À» ½ÇÇàÇϱâ À§ÇÏ¿© Á¸ÀçÇØ¾ß ÇÒ ÇÊ¿ä´Â ¾ø½À´Ï´Ù, ¹Ý¸é¿¡ ÇÁ·Î±×·¥À» dll°ú ¿¬°áÇØ ³õ¾Ò´Ù¸é, ±× dllÀº ÇʼöÀûÀ¸·Î ÀÖ¾î¾ß ÇÕ´Ï´Ù. ¹°·Ð, foo.pyd´Â "import foo"¸¦ »ç¿ëÇϱ⸦ ¿øÇÑ´Ù¸é ÇÊ¿äÇÕ´Ï´Ù. dll¿¡¼, ¿¬°áÀº ¼Ò½ºÄڵ忡 __declspec(dllexport)À¸·Î ¼±¾ðµË´Ï´Ù. .pyd¿¡¼, ¿¬°áÀº À̿밡´ÉÇÑ ÇÔ¼öµéÀÇ ¸ñ·Ï¾È¿¡ Á¤Àǵ˴ϴÙ.
¿øÀÎ: ±¸Çü Tcl/Tk DLLÀ» ¿©·¯ºÐÀÇ °æ·Î (¾Æ¸¶µµ C:\Windows)¿¡ ÀÖ´Â cygwinÀ¸·Î ±¸ÃàÇß½À´Ï´Ù. Tcl/Tk Ç¥ÁØ ¼³Ä¡¿¡ ÀÖ´Â Tcl/Tk DLLÀ» »ç¿ëÇØ¾ß ÇÕ´Ï´Ù. (ÆÄÀ̽ã 1.5.2¿¡ ÇÔ²² µþ·Á¿É´Ï´Ù).
Win2K:
Ç¥ÁØ ¼³Ä¡±â´Â ÀÌ¹Ì .py È®ÀåÀÚ¸¦ ÆÄÀÏ Å¸ÀÔ(Python.File)¿¡ ¿¬°áÇØ µÎ°í ÀÖ½À´Ï´Ù ±×¸®°í ±× ÆÄÀÏ Å¸ÀÔ¿¡ ÀÎÅÍÇÁ¸®Å͸¦ ½ÇÇàÇÏ´Â °³¹æ ¸í·É¾î¸¦ ÇÒ´çÇÕ´Ï´Ù (D:\Program Files\Python\python.exe "%1" %*). À̰ÍÀ¸·Î ÃæºÐÈ÷ ½ºÅ©¸³Æ® ÆÄÀÏÀ» ¸í·É¾î ÇÁ·ÒÇÁÆ®¿¡¼ 'foo.py'·Î ½ÇÇà°¡´ÉÇÏ°Ô ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¸¸¾à È®ÀåÀÚ ¾øÀÌ ´Ü¼øÈ÷ 'foo'¶ó°í ŸÀÚÇÔÀ¸·Î½á ±× ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÒ ¼ö Àֱ⸦ ¿øÇÑ´Ù¸é .py¸¦ PATHEXT ȯ°æ º¯¼ö¿¡ Ãß°¡ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.
WinNT:
À§¿¡ Àü¼úÇÑ´ë·Î ¼³Ä¡µÈ ´Ü°è¸¦ °ÅÃļ ½ºÅ©¸³Æ®¸¦ 'foo.py'·Î ½ÇÇàÇÒ ¼ö ÀÖ½À´Ï´Ù, ±×·¯³ª NT ¸í·É¾î 󸮱âÀÇ °íÁúÀûÀÎ ¹ö±×·Î ÀÌ·±½ÄÀ¸·Î ½ÇÇàµÈ ½ºÅ©¸³Æ®ÀÇ ÀԷ°ú Ãâ·ÂÀ» ¹æÇâÀüȯÇÒ ¼ö ¾ø½À´Ï´Ù. À̰ÍÀº ¶§·Î Áß¿äÇÑ ¹®Á¦ÀÔ´Ï´Ù.
WinNTÇÏ¿¡¼ ÆÄÀ̽㠽ºÅ©¸³Æ®¸¦ ½ÇÇà°¡´ÉÇÏ°Ô ÇÏ´Â ÀûÀýÇÑ ¸¶¹ýÀ̶ó¸é ±× ÆÄÀÏ¿¡ È®ÀåÀÚ .cmd¸¦ ÇÒ´çÇÏ°í ´ÙÀ½À» ù ¹øÂ° ¶óÀÎÀ¸·Î Ãß°¡ÇÏ´Â °ÍÀÔ´Ï´Ù:
@setlocal enableextensions & python -x %~f0 %* & goto :EOFWin9x:
[ºê·ç½º ¿¡ÄÌ(Bruce Eckel)ÀÇ ¹è·Á]
@echo off rem = """ rem run python on this bat file. Needs the full path where rem you keep your python files. The -x causes python to skip rem the first line of the file: python -x c:\aaa\Python\\"%0".bat %1 %2 %3 %4 %5 %6 %7 %8 %9 goto endofpython rem """
# The python program goes here:
print "hello, Python"
# For the end of the batch file: rem = """ :endofpython rem """
ÀÌ ¹öÀüÀº CTL3D32.DLLÀ» »ç¿ëÇÏ¸ç ¿Ã¹Ù¸¥ ¹öÀüÀÌ ¾Æ´Õ´Ï´Ù. ÀÌ ¹öÀüÀº À©µµ¿ì NT ¾îÇø®ÄÉÀ̼ǿ¡¸¸ »ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù.[ÆÀ ÇÇÅͽº(Tim Peters)] À̰ÍÀº Microsoft DLL·Î¼, ¹®Á¦ÀÇ ±Ù¿øÀ¸·Î ¾Ç¸í ³ô½À´Ï´Ù. ÀÌ ¸Þ½ÃÁö°¡ ¶æÇÏ´Â ¹Ù´Â: ¿©·¯ºÐÀÇ ¿î¿µÃ¼Á¦¿¡ ÀÌ DLLÀÌ ¸ÂÁö ¾Ê´Â ¹öÀüÀ» °¡Áö°í ÀÖ´Ù´Â ¶æÀÔ´Ï´Ù. ÆÄÀ̽㠼³Ä¡·Î´Â ÀÌ·¯ÇÑ °ÍÀ» ¾ß±â ÇÏÁö ¾Ê½À´Ï´Ù -- ÀÌ Àü¿¡ ¼³Ä¡ÇÑ ´Ù¸¥ ¾î¶² °ÍÀÌ ¿î¿µÃ¼Á¦¿¡ µþ·Á¿Â DLLÀ» µ¤¾î½èÀ» °ÍÀÔ´Ï´Ù. (¾Æ¸¶µµ ¿À·¡µÈ ½¦¾î¿þ¾î Á¾·ùÀϰ̴ϴÙ, ±×·¯³ª Áö±ÝÀ¸·Î¼´Â ¸»ÇÒ ¹æ¹ýÀÌ ¾ø½À´Ï´Ù). ¸¸¾à "CTL3D32"À» (¿¹¸¦ µé¾î, ¾ËŸºñ½ºÅ¸ °°Àº) ´Ù¸¥ °Ë»ö ¿£Áø »ç¿ëÇÏ¿© °Ë»öÇØº¸¸é, ¼ö¹é ¼öõÀÇ À¥ÆäÀÌÁö¿¡¼ ¸ðµç Á¾·ùÀÇ ¼³Ä¡ ÇÁ·Î±×·¥¿¡¼ °°Àº ¹®Á¦¿¡ °üÇÏ¿© ºÒÆòÇϰí ÀÖ´Â °ÍÀ» º¸½Ç ¼ö ÀÖ½À´Ï´Ù. ±×°ÍµéÀ» º¸½Ã¸é ¿©·¯ºÐÀÇ ½Ã½ºÅÛ¿¡ Á¤È®ÇÑ ¹öÀüÀ» À缳ġÇÏ´Â ¹æ¹ýÀ» ¾Æ½Ç ¼ö ÀÖÀ» °Ì´Ï´Ù. (ÆÄÀ̽ãÀÌ ÀÌ ¹®Á¦¸¦ ¾ß±âÇÏ´Â °ÍÀÌ ¾Æ´Ï±â ¶§¹®¿¡, ¿ì¸®´Â ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ¾ø½À´Ï´Ù).
µ¥À̺ñµå ¿¡ÀÌ ¹öư(David A Burton)ÀÌ ÀÌ ¹®Á¦¸¦ ÇØ°áÇÏ´Â ÀÛÀº ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ¿´½À´Ï´Ù. http://www.burtonsys.com/download.html¿¡ °¡¼Å¼ "ctl3dfix.zip"¿¡ µþ±ïÇØº¸¼¼¿ä.
ÆÄÀ̽ã ÀÎÅÍÇÁ¸®Å͸¦ À©µµ¿ì ¾îÇø®ÄÉÀ̼ǿ¡ ³»ÀåÇÏ´Â °ÍÀº ´ÙÀ½°ú °°ÀÌ ¿ä¾àµÉ ¼ö ÀÖ½À´Ï´Ù:
1. ÆÄÀ̽ãÀ» ¿©·¯ºÐÀÇ .exe ÆÄÀÏ ¾ÈÀ¸·Î Á÷Á¢ÀûÀ¸·Î ±¸ÃàÇØ ³ÖÁö ¸¶¼¼¿ä. À©µµ¿ì¿¡¼´Â, ÆÄÀ̽ãÀº ¹Ýµå½Ã DLLÀÌ µÇ¾î¾ß ±× ÀÚü·Î DLLÀÎ ¸ðµâµéÀ» ¼öÀÔÇÒ ¼ö ÀÖ½À´Ï´Ù. (À̰ÍÀÌ °¡Àå Áß¿äÇÑ ¹®¼ÈµÇÁö ¾ÊÀº »ç½ÇÀÔ´Ï´Ù.) ´ë½Å¿¡, python15.dll¿¡ ¿¬°áÇϼ¼¿ä; ±×°ÍÀº ÀüÇüÀûÀ¸·Î c:\Windows\System¿¡ ¼³Ä¡µË´Ï´Ù.
ÆÄÀ̽㿡 Á¤Àû ȤÀº µ¿ÀûÀ¸·Î ¿¬°áÇÒ ¼ö ÀÖ½À´Ï´Ù. Á¤ÀûÀ¸·Î ¿¬°áÇÑ´Ù´Â °ÍÀº python15.lib¿¡ ´ëÇÏ¿© ¿¬°áÇÑ´Ù´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù. °áÁ¡Àº, ¸¸¾à ½Ã½ºÅÛ¿¡ python15.dllÀÌ Á¸ÀçÇÏÁö ¾Ê´Â´Ù¸é ¾îÇø®ÄÉÀ̼ÇÀÌ ÀÛµ¿ÇÏÁö ¾Ê´Â´Ù´Â °ÍÀÔ´Ï´Ù.
ÀϹÝÀû ÁÖÀÇ: python15.libÀº python.dll¿¡ »óÀÀÇÏ¿© À̸¥¹Ù "import lib"À¸·Î ºÒ¸®¿ó´Ï´Ù. ±×°ÍÀº ´Ü¼øÈ÷ ¿¬°áÀÚ¸¦ À§ÇÏ¿© ½Éº¼À» Á¤ÀÇÇÒ »ÓÀÔ´Ï´Ù.
º¼·£µå»çÀÇ ÁÖÀÇ: python15.lib¸¦ Coff2Omf.exeÀ» »ç¿ëÇÏ¿© ¸ÕÀú OMF Æ÷¸ËÀ¸·Î º¯È¯Çϼ¼¿ä.
µ¿ÀûÀ¸·Î ¿¬°áÇÏ°Ô µÇ¸é ¿¬°á ¼±ÅûçÇ×µéÀ» ´ë´ÜÈ÷ ´Ü¼øÇÏ°Ô ÇÒ ¼ö ÀÖ½À´Ï´Ù; ¸ðµç °ÍÀº ½ÇÇà½Ã¿¡ ÀϾ´Ï´Ù. ¿©·¯ºÐÀÇ ÄÚµå´Â python15.dllÀ» À©µµ¿ìÀÇ LoadLibraryEx ·çƾÀ» »ç¿ëÇÏ¿© ÀûÀçÇÏ¿©¾ß ÇÕ´Ï´Ù. ±× ÄÚµå´Â ¶ÇÇÑ À©µµ¿ìÀÇ GetProcAddress ·çƾ¿¡ ÀÇÇÏ¿© ȹµæµÈ Æ÷ÀÎÅ͸¦ »ç¿ëÇÏ¿© python15.dll¿¡ ÀÖ´Â Á¢±Ù ·çƾ°ú µ¥ÀÌŸ¸¦ (Áï ´Ù½Ã ¸»Çϸé, ÆÄÀ̽ãÀÇ C API¸¦) »ç¿ëÇÏ¿©¾ß ÇÕ´Ï´Ù. ¸¶Å©·Î´Â ÀÌ·¯ÇÑ Æ÷ÀÎÅ͸¦ ÆÄÀ̽ãÀÇ C API¿¡ ÀÖ´Â ·çƾÀ» È£ÃâÇÏ´Â ¾î¶°ÇÑ C Äڵ忡µµ Åõ¸íÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
2. SWIGÀ» »ç¿ëÇϽŴٸé, ÆÄÀ̽ãÀÇ "È®Àå ¸ðµâ"À» ÀÛ¼ºÇÏ´Â °ÍÀÌ ½¬¿îµ¥ ¾îÇÃÀÇ µ¥ÀÌŸ¿Í ¸Þ½îµå¸¦ ÆÄÀ̽㿡¼ »ç¿ë°¡´ÉÇϵµ·Ï ¸¸µé¾î ÁÝ´Ï´Ù. SWIGÀº ¿©·¯ºÐÀ» ´ë½ÅÇÏ¿© °ñÄ¡¾ÆÇ ¸ðµç ¹®Á¦µéÀ» ó¸®ÇØ ÁÙ °ÍÀÔ´Ï´Ù. ±× °á°ú´Â C ÄÚµå·Î¼ _¿©·¯ºÐÀÇ .exe ÆÄÀÏ¿¡_ ¿¬°áÇÏ¿© ÁØ °ÍÀÔ´Ï´Ù.(!) DLLÆÄÀÏÀ» ¸¸µé ÇÊ¿ä´Â _¾ø½À´Ï´Ù_, ±×¸®°í À̰ÍÀº ¿¬°áÇÏ´Â °ÍÀ» °£´ÜÇÏ°Ô ÇÏ¿© ÁÝ´Ï´Ù.
3. SWIGÀº ÃʱâÈ ÇÔ¼ö Çϳª(C ÇÔ¼ö)¸¦ ¸¸µé °ÍÀ̵¥ ±× À̸§Àº ±× È®Àå ¸ðµâÀÇ À̸§¿¡ ´Þ·Á ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, ±× ¸ðµâÀÇ À̸§ÀÌ leo¶ó¸é, ±× ÃʱâÈ ÇÔ¼ö´Â initleo()¶ó°í ºÒ¸®¿öÁú °ÍÀÔ´Ï´Ù. ¸¸¾à SWIG shadow Ŭ·¡½º¸¦ »ç¿ëÇϽŴٸé, ±×·¸°Ô »ç¿ëÇÏ¼Å¾ß Çϴµ¥, ±× ÃʱâÈ ÇÔ¼ö´Â initleoc()¶ó°í ºÒ¸®¿öÁú °ÍÀÔ´Ï´Ù. À̰ÍÀº ±í¼÷È÷ ¼ûÀº helper Ŭ·¡½º¸¦ ÃʱâÈ Çϴµ¥ ±× Ŭ·¡½º´Â shadow Ŭ·¡½º°¡ »ç¿ëÇÕ´Ï´Ù.
±× C Äڵ带 2´Ü°è¿¡¼ ¿©·¯ºÐÀÇ .exe ÆÄÀÏ¿¡ ¿¬°áÇÒ ¼ö ÀÖ´Â ÀÌÀ¯´Â ±× ÃʱâÈ ÇÔ¼ö¸¦ È£ÃâÇÏ´Â °ÍÀÌ ±× ¸ðµâÀ» ÆÄÀ̽ãÀ¸·Î ¼öÀÔÇÏ´Â °Í°ú µ¿ÀÏÇϱ⠶§¹®ÀÔ´Ï´Ù! (À̰ÍÀÌ µÎ ¹øÂ°ÀÇ ¹®¼È µÇÁö ¾ÊÀº Áß¿ä »ç½ÇÀÔ´Ï´Ù.)
4. ¿ä¾àÇϸé, ´ÙÀ½ÀÇ Äڵ带 »ç¿ëÇÏ¿© ÆÄÀ̽ã ÀÎÅÍÇÁ¸®Å͸¦ ¿©·¯ºÐÀÇ È®Àå ¸ðµâ·Î ÃʱâÈÇÒ ¼ö ÀÖ½À´Ï´Ù.
#include "python.h" ... Py_Initialize(); // Initialize Python. initmyAppc(); // Initialize (import) the helper class. PyRun_SimpleString("import myApp") ; // Import the shadow class.5. PythonÀÇ C API¿¡´Â µÎ °³ÀÇ ¹®Á¦°¡ Àִµ¥ MSVC ¸»°í ´Ù¸¥ ÄÄÆÄÀÏ·¯¸¦ »ç¿ëÇØ º¸½Ã¸é ±× ¹®Á¦´Â ¸í¹éÇØ Áý´Ï´Ù, MSVC ÄÄÆÄÀÏ·¯´Â python15.dllÀ» ±¸ÃàÇϴµ¥ »ç¿ëµÇ¾ú¾ú½À´Ï´Ù.
ù¹øÂ° ¹®Á¦: FILE * Àμö¸¦ ÃëÇÏ´Â, À̸¥¹Ù "´ë´ÜÈ÷ °í ¼öÁØ"ÀÇ ÇÔ¼ö´Â ´ÙÁß-ÄÄÆÄÀÏ·¯ ȯ°æ¿¡¼´Â ÀÛµ¿ÇÏÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù; °¢ ÄÄÆÄÀÏ·¯°¡ FILE ±¸Á¶¸¦ ÀνÄÇÏ´Â °ÍÀÌ ´Þ¶óÁú °ÍÀÔ´Ï´Ù. °æ°í°¡ ÆÄÀ̽㠹®¼¿¡ Ãß°¡µÇ¾î¾ß ÇÒ °ÍÀÔ´Ï´Ù! ±¸ÇöÀÇ °üÁ¡¿¡¼ º¸¸é ÀÌ·¯ÇÑ °ÍµéÀº ´ë´ÜÈ÷_Àú_ ¼öÁØ ÇÔ¼ö ÀÔ´Ï´Ù.
µÎ ¹øÂ° ¹®Á¦: SWIGÀº void ÇÔ¼ö¿¡ ´ëÇÑ Æ÷ÀåÀÚ¸¦ »ý¼ºÇÒ ¶§ ´ÙÀ½ÀÇ Äڵ带 »ý¼ºÇÕ´Ï´Ù:
Py_INCREF(Py_None); _resultobj = Py_None; return _resultobj;¾ÈŸ±õ°Ôµµ, Py_NoneÀº ¸ÅÅ©·Î·Î¼ python15.dll ¾È¿¡¼ _Py_NoneStruct¶ó°í ºÒ¸®¿ì´Â º¹ÀâÇÑ µ¥ÀÌŸ ±¸Á¶¸¦ ÂüÁ¶Çϵµ·Ï È®ÀåµË´Ï´Ù. ÀÌÁ¦, ÀÌ ÄÚµå´Â ´ÙÁß-ÄÄÆÄÀÏ·¯ ȯ°æ¿¡¼´Â ½ÇÆÐÇÒ °ÍÀÔ´Ï´Ù. ±×·¯ÇÑ Äڵ带 ´ÙÀ½°ú °°ÀÌ ´ëüÇϼ¼¿ä:
return Py_Build("");SWIGÀÇ %typemap ¸í·É¾î¸¦ »ç¿ëÇÏ¿© ±× º¯°æÀ» ÀÚµ¿ÀûÀ¸·Î ÇÏ´Â °Íµµ °¡´ÉÇÒ °ÍÀÔ´Ï´Ù, ±×·¸Áö¸¸ Àú´Â À̰ÍÀ» ¾ÆÁ÷±îÁö ÀÛµ¿½ÃŰÁö ¸øÇϰí ÀÖ½À´Ï´Ù (Àú´Â ¿ÏÀüÈ÷ SWIG Ãʺ¸ÀÔ´Ï´Ù.)
6. ÆÄÀ̽ãÀÇ ½© ½ºÅ©¸³Æ®¸¦ »ç¿ëÇÏ¿© ÆÄÀ̽ã ÀÎÅÍÇÁ¸®Å͸¦ ¿©·¯ºÐÀÇ À©µµ¿ì ¾îÇà ¾È¿¡¼ ¶ç¿ì´Â °ÍÀº ¹Ù¶÷Á÷ÇÑ »ý°¢ÀÌ ¾Æ´Õ´Ï´Ù; °á°ú·Î ³ª¿À´Â ±× âÀº ¿©·¯ºÐÀÇ ¾îÇÃÀÇ À©µµ¿ì ½Ã½ºÅÛ¿¡ µ¶¸³ÀûÀÌ µÉ °ÍÀÔ´Ï´Ù. ¿ÀÈ÷·Á, ¿©·¯ºÐÀº (ȤÀº wxPythonWindow Ŭ·¡½º)´Â "°íÀ¯ÀÇ" ÀÎÅÍÇÁ¸®ÅÍ À©µµ¿ì¸¦ »ý¼ºÇؾ߸¸ ÇÕ´Ï´Ù. ±× À©µµ¿ì¸¦ ¿ëÀÌÇÏ°Ô ÆÄÀ̽ã ÀÎÅÍÇÁ¸®ÅÍ¿¡ ¿¬°áÇÒ ¼ö ÀÖ½À´Ï´Ù. ÆÄÀ̽ãÀÇ i/o¸¦ ÀÐ°í ¾²±â¸¦ Áö¿øÇÏ´Â _¾î¶²_ °´Ã¼¿¡µµ ¹æÇâ ÀüȯÇÒ ¼ö ÀÖ½À´Ï´Ù, ±×·¯¹Ç·Î ¿©·¯ºÐÀÌ ÇÊ¿äÇÑ °ÍÀº (È®Àå ¸ðµâ¿¡ Á¤ÀǵÈ) Àб⠾²±â ¸Þ½îµå¸¦ ´ã°í ÀÖ´Â ÆÄÀ̽㠰´Ã¼ÀÔ´Ï´Ù.