¶¯Ì¬Á´½Ó¿âÊÇÒ»¸öÄܹ»±»Ó¦ÓóÌÐòºÍÆäËüµÄDLLµ÷ÓõĹý³ÌºÍº¯ÊýµÄ¼¯ºÏÌå,ËüÀïÃæ°üº¬µÄÊǹ«¹²´úÂë»ò×ÊÔ´¡£ÓÉÓÚDLL´úÂëʹÓÃÁËÄÚ´æ¹²Ïí¼¼Êõ,ÔÚijЩµØ·½windowsÒ²¸øÁËDLLһЩ¸ü¸ßµÄȨÏÞ,Òò¶øDLLÖпÉÒÔʵÏÖһЩһ°ã³ÌÐòËù²»ÄÜʵÏֵŦÄÜ,ÈçʵÏÖwindowsµÄHOOK¡¢ISAPIµÈ¡£Í¬Ê±,DLL»¹Îª²»Í¬ÓïÑÔ¼ä´úÂë¹²ÏíÌṩÁËÒ»Ìõ·½±ãµÄ;¾¶¡£Òò¶øDLLÔÚ±à³ÌʱӦÓýÏΪ¹ã·º,±¾ÎĽ«½éÉÜÈçºÎÔÚ Delphi Öн¨Á¢ºÍʹÓÃDLL¡£
Ò»£®DLL ¿âÄÚ´æ¹²Ïí»úÖÆ
´ÓʹÓÃЧ¹û¿´,DLLºÍunit ºÜÏñ,ËüÃǶ¼¿ÉÒÔ±»±ðµÄ¹¤³ÌÄ£¿éËùµ÷ÓÃ,µ«¶þÕßÔÚÄÚ²¿µÄʵÏÖ»úÖÆÉÏÈ·´æÔÚ×Ųî±ð¡£Èç¹ûÒ»¸ö³ÌÐòÄ£¿éÖÐÓÃusesÓï¾äÒýÓÃÁËij¸öunit,±àÒë³ÌÐòÔÚ±àÒë¸ÃÄ£¿éʱ,±ã»áÁ¬Í¬unitÒ»Æð±àÒë,²¢°Ñ±àÒëºóµÄ¿ÉÖ´ÐдúÂëÁ´½Óµ½±¾³ÌÐòÄ£¿éÖÐ,Õâ¾ÍÊÇÒ»¸ö³ÌÐòÄ£¿éÄܹ»µ÷ÓÃËùÒýÓÃunitÖйý³ÌºÍº¯ÊýµÄÔÒò¡£µ±Í¬Ò»¸öunit±»¶à¸ö¹¤³ÌËùÒýÓÃʱ,Ôòÿ¸ö¹¤³ÌÖж¼º¬ÓиÃunitµÄ¿ÉÖ´ÐдúÂë,µ±º¬ÓиÃunitµÄ¶à¸ö¹¤³ÌͬʱִÐÐʱ,unitµÄ¿ÉÖ´ÐдúÂë»áËæ²»Í¬¹¤³Ì¶ø¶à´Î±»µ÷ÈëÄÚ´æ,Ôì³ÉÄÚ´æ×ÊÔ´µÄÀË·Ñ¡£DLLÔò²»Í¬,Ëü¼´Ê¹±»Ä³¸ö¹¤³Ìµ÷ÓÃ,±àÒëºóÈÔÊǶÀÁ¢µÄ,Ò²¾ÍÊÇ˵±àÒëºó,Ò»¸öDLL¿âÐγÉÒ»¸öµ¥¶ÀµÄ¿ÉÖ´ÐÐÎļþ,¶ø²»ÓëÈÎºÎÆäËüµÄ¿ÉÖ´ÐÐÎļþÁ¬½ÓÔÚÒ»Æð,Òò¶øDLL¿â ......
Client:TSocketConnection ºÍServer: Scktsrvr¹ØÏµ----ѹËõÊý¾Ý´«Êä
Ò»Ö±ÓÃSocketConnectionºÍ·þÎñ¶ËµÄ´«ÊäÊý¾ÝÔÚÈý²ãÊý¾Ý¿âÖУ¬´ÓÀ´Ã»ÓÐ×¢Òâµ½ËüÃÇÖ®¼äµÄÊý¾Ý´«Ê䣬ֻÊÇÏë×Å£¬¹ÜËüÁË£¬ÍøÂçµÄÊ£¬Ç°¶Îʱ¼äÔÚDelphiÖеÄDemosÖз¢ÏÖDemos\Midas\Intrcpt.dprÀý×Ó£¬ºÇºÇ£¬ÔÙ¿´Á˰ëÌìµÄVCL·¢ÏÖ¿ÉÒÔ½«Client¶Ë·¢Ë͵ĸøServerµÄÊý¾Ý£¬ºÍServer·¢Ë͸øClientµÄÊý¾ÝÊÇ¿ÉÒÔ½øÐÐѹËõµÄ¡£ºÇºÇ£¬²»¸Ò²ØË½£¬Share¸ø´ó¼Ò¡£
1:
×¼±¸¹¤×÷,ÏÈdelphi¹âÅÌÖеÄ\info\extras\zlib\zlib.pas½øÐбàÒȻºócopy µ½lib·¾¶ÖУ¬ÒòΪҪѹËõÊý¾Ý£¬±ØÐëÒªÓÐѹËõ¹¦ÄÜ£¬Õâ¸ödelphiÒѾ×Ô´ø£¬ËüÊÇ»ùÓÚÁ÷µÄ·½Ê½¶Ô½Ó¿ÚIDataBlock(TDataBlockʵÏÖ£¬Æäʵ¾ÍÊǶÔTMemoryStreamµÄ²Ù×÷)Êý¾Ý½øÐÐѹËõºÍ½âѹµÄ¡£×öÁËÕâ¸öºó£¬²ÅÄܽøÐÐÏÂÃæµÄ¹¤×÷¡£
2:
Open \Demos\Midas\Intrcpt\Intrcpt.dpr
complier....(ÈçûÓÐ×öµÚÒ»²½£¬ºÙºÙ...)
Éú³ÉIntrcpt.dll
½«Intrcpt.dll copy to System directory,»òÕßÄãµÄ³ÌÐòÏÂÃæ¡£
×¢²áËü£ºregsrvr32 Intrcpt.dll (Ϊʲô£¬Õâ¸öÂï...)
¼ÇסIntrcpt.dprµÄÄǸöGUID,ÄãÒ²¿ÉÒÔ×Ô¼ºÖØÐÂÉú³ÉÒ»¸ö(°´Shift+Ctrl+G)
3:
Server:
Open scktsrvr.exe£¬ÏàП÷λ¶¼ºÜÊìϤÄǽçÃæ£ ......
×¢£º ʹÓôíÎ󣬻òÕßÔڸüӵĵط½Ã»Óмӣ¬¿ÉÄÜ»á³öÏÖ"privileged instruction"´íÎ󣬻òÕßµØÖ··ÃÎÊ´íÎó¡£
³£¼ûµÄµ÷ÓùßÀýÓÐregister, pascal, cdecl, stdcall, safecall¡£º¯ÊýµÄµ÷ÓùÜÀí¾ö¶¨Á˲ÎÊýÈçºÎ´«µÝ¸ø×Ó¹ý³Ì£¬²¢´Ó¶ÑÕ»ÖÐÍ˳ö£¬ÒÔ¼°¼Ä´æÆ÷ÔÚ²ÎÊý´«µÝÖеÄʹÓ㬴íÎóºÍÒì³£µÄ´¦Àí¡£DelphiÖÐĬÈϵĵ÷ÓùßÀýÊÇregister¡£
1) registerºÍpascal£º²ÎÊý´Ó×óÏòÓÒ´«µÝ£¬Ò²¾ÍÊÇ˵×î×ó±ßµÄ²ÎÊý×îÏÈÇóÖµ²¢´«È룬×îÓұߵIJÎÊý×îºóÇóÖµºÍ´«Èë¡£cdecl£¬stdcallºÍsafecallÔò°´´ÓÓÒÏò×ó·½Ïò¡£
2) ¶ÔÓÚ³ýcdeclÖ®ÍâµÄËùÓе÷ÓùßÀý£¬º¯Êý/¹ý³ÌÔÚ·µ»ØµÄʱºòÒª°Ñ¶ÑÕ»ÖеIJÎÊýÍËÕ»¡£¶Ôcdecl¹ßÀý£¬µ÷ÓÃÕßÔÚ±»µ÷ÓõĹý³Ì·µ»ØºóÖ´ÐвÎÊýÍËÕ»²Ù×÷
3) registerµ÷ÓùßÀý×î¶àÄÜÓÃ3¸öCPU¼Ä´æÆ÷À´´«µÝ²ÎÊý£¬¶øÆäËüµ÷ÓùßÀýÖ»ÄÜͨ¹ý¶ÑÕ»À´´«µÝ²ÎÊý
4) safecallµ÷ÓùßÀýʵÏÖÁËÒì³£µÄ·À»ðǽ¡£ÔÚWindowsÉÏʵÏÖÁË¿ç½ø³ÌµÄCOM´íÎó֪ͨ»úÖÆ¡£
5) registerµ÷ÓÃЧÂÊ×î¸ß£¬ÒòΪËü±ÜÃâÁ˶ÑÕ»µÄ´´½¨¡£DelphiÖÐpublishedÊôÐÔ±ØÐëÊÇregister¡£
6) cdecl³£ÓÃÓÚµ÷ÓÃC/C++±àдµÄ¹²Ïí¿âÖеĺ¯Êý£»µ«ÊÇ£¬Èç¹ûÒªµ÷ÓÃÍⲿ´úÂ룬ÄÇôһ°ãÒªÓÃstdcallºÍsafecall
7) ÔÚWindowsÉÏ£¬ÏµÍ³µÄAPI¶¼ÊÇstdcall ......
Ò» DllµÄÖÆ×÷Ò»°ã²½Öè
¶þ ²ÎÊý´«µÝ
Èý DLLµÄ³õʼ»¯ºÍÍ˳öÇåÀí[Èç¹ûÐèÒª³õʼ»¯ºÍÍ˳öÇåÀí]
ËÄ È«¾Ö±äÁ¿µÄʹÓÃ
Îå µ÷Óþ²Ì¬ÔØÈë
Áù µ÷Óö¯Ì¬ÔØÈë
Æß ÔÚDLL½¨Á¢Ò»¸öTForM
°Ë ÔÚDLLÖн¨Á¢Ò»¸öTMDIChildForM
¾Å ʾÀý£º
Ê® DelphiÖÆ×÷µÄDllÓëÆäËûÓïÑԵĻìºÏ±à³ÌÖг£ÓöÎÊÌ⣺
ʮһ Ïà¹Ø×ÊÁÏ
Ò» DllµÄÖÆ×÷Ò»°ã·ÖΪÒÔϼ¸²½£º
1 ÔÚÒ»¸öDLL¹¤³ÌÀïдһ¸ö¹ý³Ì»òº¯Êý
2 дһ¸öExports¹Ø¼ü×Ö£¬ÔÚÆäÏÂд¹ý³ÌµÄÃû³Æ¡£²»ÓÃд²ÎÊýºÍµ÷Óúó׺¡£
¶þ ²ÎÊý´«µÝ
1 ²ÎÊýÀàÐÍ×îºÃÓëwindow C++µÄ²ÎÊýÀàÐÍÒ»Ö¡£²»ÒªÓÃDELPHIµÄÊý¾ÝÀàÐÍ¡£
2 ×îºÃÓзµ»ØÖµ[¼´Ê¹ÊÇÒ»¸ö¹ý³Ì]£¬À´±¨³öµ÷Óóɹ¦»òʧ°Ü£¬»ò״̬¡£³É¹¦»òʧ°ÜµÄ·µ»ØÖµ×îºÃΪ1[³É¹¦]»ò0[ʧ°Ü].Ò»¾ä»°£¬Óëwindows c++¼æÈÝ¡£
3 ÓÃstdcallÉùÃ÷ºó׺¡£
4 ×îºÃ´óСдÃô¸Ð¡£
5 ÎÞÐëÓÃfarµ÷Óúó׺£¬ÄÇÖ»ÊÇΪÁËÓëwindows 16λ³ÌÐò¼æÈÝ¡£
Èý DLLµÄ³õʼ»¯ºÍÍ˳öÇåÀí[Èç¹ûÐèÒª³õʼ»¯ºÍÍ˳öÇåÀí]
1 DLLProc[SysUtilsµ¥ÔªµÄÒ»¸öPointer]ÊÇDLLµÄÈë¿Ú¡£ÔÚ´ËÄã¿ÉÓÃÄãµÄº¯ÊýÌæ»»ÁËËüµÄÈë¿Ú ......
// µ÷ÓÃÒ³ÃæµÄˢз½·¨
IHTMLWindow2* pWindow;
IHTMLDocument2* pDocument;
HRESULT hr = GetDHtmlDocument(&pDocument);
hr = pDocument->get_parentWindow(&pWindow);
if( pWindow)
{
VARIANT ret;
ret.vt = VT_EMPTY;
CString sFunc = _T("RefreshFileForClient()");
CString sLang = _T("javascript");
hr = pWindow->execScript(sFunc.AllocSysString(), sLang.AllocSysString(), &ret);
} ......
ÔÚWeb¿ª·¢ÖУ¬»áÓöµ½´ÓÒ»Ò³£¨¸¸Ò³£©µ¼ÏòÁíÒ»Ò³£¨×ÓÒ³£©£¬²¢ÇÒÒªÇó“·µ»Ø”¸¸Ò³µÄÇé¿ö£¬ÔÚÕâÀïÈç¹ûÓÃASP.NETÌṩµÄ Response.Redirect()·½·¨£¬ÍùÍù²»»á´ïµ½ÀíÏëµÄЧ¹û£¬ÀýÈ磺·µ»Øºó£¬ÖØÐ¼ÓÔØÁËÒ³Ãæ£¬ÎÞ·¨±£´æµ¼Ïò×ÓҳǰµÄ״̬£¬µÈµÈ£¬ÔÚÕâÀïÎҾͽéÉÜ Ò»ÏÂÈçºÎʹÓÃJavaScriptÖÐhistory.go()º¯ÊýÀ´ÊµÏÖ·µ»Ø¹¦Äܲ¢ÇÒ±£´æ×¡×´Ì¬µÄ·½·¨¡£
Õâ¸öº¯ÊýÓÃÆðÀ´ºÜ¼òµ¥£¬Ö»ÒªÔÚÒ³ÃæÉϼÓÒ»¸öhtmlµÄinputÔªËØ£¬ÀýÈ磺
<input type="button" value="·µ»Ø">
È»ºóÔÙΪÕâ¸öÔªËØÌí¼ÓonclickÊôÐÔ£¬È磺
<input type="button" value="·µ»Ø" onclick="history.go(-1);">
ÕâÑù¾ÍÄÜ´ïµ½·µ»ØÉÏÒ»Ò³µÄЧ¹û¡£µ«ÊÇ£¬ÍùÍùÔÚʵ¼ùÖУ¬²¢Ã»ÓÐÕâô¼òµ¥£¬µ±ÄãÔÚÏò·þÎñÆ÷Ìá½»ÇëÇóµÄʱºò£¬ÒýÆðÒ³Ãæ»Ø·¢£¬ÄãÔÙÓÃhistory.go(-1) ÕâÕоͲ»ÁéÀ²£¬ËüÔÚÕâÀïÊÇ·µ»ØÄã»Ø·¢Ç°µÄ״̬£¬goºóÃæµÄ²ÎÊý£¬Êµ¼ÊÉϾÍÊDZêʶÄãÒª·µ»ØÄã»Ø·¢µÚǰn´ÎµÄ״̬£¬ËùÒÔÖ»ÒªÄܼÇס»Ø·¢Á˼¸´Î£¬¾ÍÄÜÓà history.go(-n)׼ȷµØ·µ»Øµ½¸¸Ò³ÁË¡£
Ô ......