ת×Ô´ó¸»ÎÌhttp://www.delphibbs.com/keylife/iblog_show.asp?xid=30049
ÀϳÂÓÐÒ»¸öÔÚÍâµØ¹¤×÷µÄÅ®¶ù£¬²»Äܾ³£»ØÀ´£¬ÀϳºÍËýͨ¹ýÐżþÁªÏµ¡£ËûÃǵÄÐŻᱻÓʵÝԱͶµÝµ½ËûÃǵÄÐÅÏäÀï¡£
¡¡¡¡ÕâºÍSocketÄ£Ðͷdz£ÀàËÆ¡£ÏÂÃæÎÒ¾ÍÒÔÀϳ½ÓÊÕÐżþΪÀý½²½âSocket I/OÄ£ÐÍ¡£
¡¡¡¡Ò»£ºselectÄ£ÐÍ
¡¡¡¡Àϳ·dz£Ïë¿´µ½Å®¶ùµÄÐÅ¡£ÒÔÖÁÓÚËûÿ¸ô10·ÖÖÓ¾ÍÏÂÂ¥¼ì²éÐÅÏ䣬¿´ÊÇ·ñÓÐÅ®¶ùµÄÐÅ£¬ÔÚÕâÖÖÇé¿öÏ£¬“ÏÂÂ¥¼ì²éÐÅÏä”È»ºó»Øµ½Â¥Éϵ¢ÎóÁËÀϳÂÌ«¶àµÄʱ¼ä£¬ÒÔÖÁÓÚÀϳÂÎÞ·¨×öÆäËû¹¤×÷¡£
¡¡¡¡selectÄ£ÐͺÍÀϳµÄÕâÖÖÇé¿ö·Ç³£ÏàËÆ£ºÖܶø¸´Ê¼µØÈ¥¼ì²é......Èç¹ûÓÐÊý¾Ý......½ÓÊÕ/·¢ËÍ.......
¡¡¡¡Ê¹ÓÃÏß³ÌÀ´selectÓ¦¸ÃÊÇͨÓõÄ×ö·¨£º
procedure TListenThread.Execute;
var
¡¡addr : TSockAddrIn;
¡¡fd_read : TFDSet;
¡¡timeout : TTimeVal;
¡¡ASock,
¡¡MainSock : TSocket;
¡¡len, i : Integer;
begin
¡¡MainSock := socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
¡¡addr.sin_family := AF_INET;
¡¡addr.sin_port := htons(5678);
¡¡addr.sin_addr.S_addr := htonl(INADDR_ANY);
¡¡bind( MainSock, @addr, sizeof(addr) );
¡¡listen( MainSock, 5 );
¡¡while ......
DELPHI²ÎÊý¼¸¸ö¸ÅÄîÉϵÄÇø±ð ÊÕ²Ø
ÒýÓòÎÊý£º
ÒýÓòÎÊýÓÃvar¹Ø¼ü×Ö±êʾ
procedure DoubleTheValue (var Value: Integer);
begin
Value := Value * 2;
end;ÔÚÕâÖÖÇé¿öÏ£¬²ÎÊý¼È°ÑÒ»¸öÖµ´«µÝ¸ø¹ý³Ì£¬ÓÖ°ÑÐÂÖµ·µ»Ø¸øµ÷Óùý³ÌµÄ´úÂë¡£µ±ÄãÖ´ÐÐÍêÒÔÏ´úÂëʱ£º
var
X: Integer;
begin
X := 10;
DoubleTheValue (X);x±äÁ¿µÄÖµ±ä³ÉÁË20£¬ÒòΪ¹ý³Ìͨ¹ýÒýÓ÷ÃÎÊÁËXµÄÔʼ´æ´¢µ¥Ôª£¬Óɴ˸ıäÁËXµÄ³õʼֵ ÔÚC++ÖУ¬ ÒýÓÃÓÃ&±íʾ
ÖµµÃ×¢ÒâµÄÊÇ£º
Delphi 3Ôö¼ÓÁËÒ»ÖÖеIJÎÊý£ºout¡£out²ÎÊýûÓгõʼֵ£¬Ö»ÊÇÓÃÀ´·µ»ØÒ»¸öÖµ¡£out²ÎÊýÓ¦Ö»ÓÃÓÚCOM¹ý³ÌºÍº¯Êý£¬Ò»°ãÇé¿öÏÂ×îºÃʹÓøüÓÐЧµÄvar²ÎÊý¡£³ýÁËûÓгõʼֵÕâÒ»µãÖ®Í⣬out²ÎÊýÓëvar²ÎÊýÏàͬ¡£
³£Á¿²ÎÊý
ºÍC++Ò»Ñù£¬ÓÃCONST¹Ø¼ü×Ö±íʾ
function DoubleTheValue (const Value: Integer): Integer
±àÒëÆ÷»áÑ¡ÓÃÒ»ÖÖÓëÒýÓòÎÊýÏàËƵķ½·¨±àÒë³£²Î£¨C++ÊõÓïÖеij£Á¿ÒýÓã©£¬µ«ÊÇ´Ó±íÃæÉÏ¿´³£²ÎÓÖÓëÖµ²ÎÏàËÆ£¬ÒòΪ³£²Î³õʼֵ²»ÊÜÀý³ÌµÄÓ°Ïì¡£
¿ª·ÅÊý×é²ÎÊý
ÓëCÓïÑÔ²»Í¬£¬Pascal º¯Êý¼°¹ý³ÌµÄ²ÎÊý¸öÊýÊÇÔ¤¶¨µÄ¡£Èç¹û²ÎÊý¸öÊýÔ¤ÏÈûÓÐÈ·¶¨£¬ÔòÐèҪͨ¹ý¿ª·ÅÊý×éÀ´ÊµÏÖ²ÎÊý´«µÝ¡£
Ò ......
DelphiÖÐDLL³õʼ»¯ºÍÍ˳ö´¦Àí
choysan
2010-01-08 8:56:43
<1>ÀûÓÃUnitµÄInitalizationÓëFinalizationÕâÁ½¸öС½Ú
¡¡¡¡¿ÉÒÔÔÚUnitµÄÕâÁ½¸öС½ÚÖа²ÅÅUnitµÄ½øÈëºÍÍ˳ö£¬µ«ÊÇ
ProgramÓëLibrary²¢Ã»ÓÐÕâÁ½¸ö²¿·Ö£¬ËùÒÔÖ»ÄÜдÔÚUnitÖС£
<2>ÀûÓÃExitProc±äÁ¿
¡¡¡¡ÔÚLibraryµÄbegin..end.ÖмäÊÇ¿ÉÒÔд´úÂëµÄ£¬ÕâÀï¿ÉÒÔ·ÅÖÃ
DLL³õʼ»¯´úÂë¡£Èç¹ûÏëÒª×öÉƺó¹¤×÷£¬Ôò¿ÉÒÔÀûÓÃExitProc±äÁ¿¡£
ÎÒÃÇÊ×ÏÈÔÚ³õʼ»¯´úÂëÖаÑExitProcÖаüº¬µÄĬÈϵÄÉƺó¹ý³ÌµØÖ·±£
´æÏÂÀ´£¬È»ºó°Ñ×Ô¶¨ÒåµÄ¹ý³ÌµÄµØÖ·¸³¸øËü£¬ÕâÑùDLLÍ˳öʱ¾Í»áÖ´
ÐÐÎÒÃÇÖƶ¨µÄ³ÌÐò£»ÔÚ×Ô¶¨ÒåµÄ¹ý³ÌµÄ×îºó£¬°ÑExitProc»Ö¸´ÔÀ´µÄ
ĬÈÏÖµ£¬ÒÔ±ãDLLÄܹ»¼ÌÐøÍê³ÉÔÀ´Ä¬ÈϵÄÉƺó¹¤×÷¡£ÏÂÃæÊÇʾÀý£º
¡¡¡¡library MyDLL;
¡¡¡¡...
¡¡¡¡OldExitProc: pointer;
¡¡¡¡...
¡¡¡¡procedure MyExitProc;
¡¡¡¡begin
¡¡¡¡... //Éƺó³ÌÐò
¡¡¡¡ExitProc := OldExitProc;
¡¡¡¡end;
¡¡¡¡...
¡¡¡¡begin
¡¡¡¡... //³õʼ»¯³ÌÐò
¡¡¡¡OldExitProc := ExitProc;
¡¡¡¡ExitProc := @MyExitProc;
¡¡¡¡end.
<3>ÀûÓÃDllProc±äÁ¿
¡¡¡¡ºÍExitProcÒ»Ñù£¬DllProcÒ²ÊÇÒ»¸öÔÚSystemdµ¥ÔªÖÐÔ¤¶¨ÒåµÄ±ä
Á¿¡£ÔÚʹÓÃDLLPr ......
Delphi ¹Ø¼ü×ÖÏê½â[ÕûÀíÓÚ "³È×Ó" µÄÌû×Ó]
absolute
//ËüʹµÃÄãÄܹ»´´½¨Ò»¸öбäÁ¿, ²¢ÇҸñäÁ¿µÄÆðʼµØÖ·ÓëÁíÒ»¸ö±äÁ¿Ïàͬ.
var
Str: string[32];
StrLen: Byte absolute Str;
//Õâ¸öÉùÃ÷Ö¸¶¨Á˱äÁ¿StrLenÆðʼµØÖ·ÓëStrÏàͬ.
//ÓÉÓÚ×Ö·û´®µÄµÚ0¸öλÖñ£´æÁË×Ö·û´®µÄ³¤¶È, ËùÒÔStrLenµÄÖµ¼´×Ö·û´®³¤¶È.
begin
Str := 'abc';
Edit1.Text := IntToStr(StrLen);
end;
abstract
//ËüÔÊÐíÄã´´½¨³éÏóµÄ·½·¨, °üÀ¨ÓгéÏó·½·¨µÄÀà³ÆΪ³éÏóÀà.
//Abstract¹Ø¼ü×Ö±ØÐëÓëVirtual»òDynamic¹Ø¼ü×ÖͬʱʹÓÃ, ÒòΪ³éÏó·½·¨±ØÐë±»¸²¸ÇʽʵÏÖ.
//³éÏóÀ಻ÄÜʵÀý»¯, ³éÏó·½·¨²»ÄÜ°üº¬·½·¨Ìå.
type
TDemo = class
private
protected
procedure X; virtual; abstract;
public
constructor Create;
destructor Destroy; override;
published
end;
and
//Ò»¡¢±íʾÂß¼Óë
if (a>0) and (b>0) then
//¶þ¡¢±íʾλÔËËã
var
a,b,c: Integer;
begin
c := (a and b);
end;
//ʹÓÃAnd±íʾÂ߼ʱ, And×óÓҵıí´ïʽ±ØÐëÓÃСÀ¨ºÅÀ¨Æð, ÒÔ±ÜÃâÒÔÉúÌõ¼þµÄ³åÍ».
//ÀýÈç:
if a>0 and b>0 then
//±àÒëÆ÷¿ÉÄÜ» ......
ÔÚWIN32ÖеĴ®¿ÚͨѶ£¨Delphi£©
ÓÉÔÚWIN32²Ù×÷ϵͳÖнûÖ¹Ó¦ÓóÌÐòÏóDOSÖÐÄÇÑùÖ±½Ó·ÃÎʼÆËã»úÓ²¼þ£¬Òò´Ë£¬ÎÞ·¨ÏóÒÔÇ°ÄÇÑù²ÉÓÃÖж϶Áд´®¿Ú¡£µ«ÊÇÔÚWIN32ÖÐÎÒÃÇ¿É·¢²ÉÓÃÁ½ÖÖ·½·¨·ÃÎÊ´®¿Ú£º1¡¢Ê¹ÓÃVBÖеÄMSCOMM´®¿Ú¿Ø¼þ£»2¡¢²ÉÓÃAPIº¯Êý£¬±¾ÎÄÖ÷Òª½éÉܲÉÓÃAPIº¯ÊýʵÏÖ´®¿ÚͨѶ¡£
ÓÉÓÚWM_COMMNOTIFYÏûÏ¢Òѱ»È¡Ïû£¬¹Ê±¾ÎÄ×Ô¶¨ÒåÁËWM_COMMNOTIFYÏûÏ¢£¬ÔÚWIN32Öм¸¸ö³£ÓõĴ®¿ÚͨÐÅAPIº¯ÊýÈçÏ£º
CreateFile ´ò¿ª´®¿Ú
CloseHandle ¹Ø±Õ¾ä±ú£¬ÓÃÓÚÊÍ·ÅÄÚ´æ
SetComm ÉèÖûº³åÇø´óС
ReadFile ¶Á´®¿Ú
WriteFile д´®¿Ú
SetCommState ÉèÖÃͨÐŲÎÊý
GetCommState »ñȡͨÐŲÎÊý
ClearCommError Çå³ý´®¿Ú´íÎó²¢»ñÈ¡¶Á¡¢Ð´»º³åÇøµ±Ç°×Ö½ÚÊý
SetCommMask ÉèÖô®¿ÚÆÁ±Îʼþ
PurgeComm Ïû³ý´®¿Ú¶Áд»º³åÇøµÄËùÓÐ×Ö·û£¬ÓÃÒÔÖÕÖ¹Ðü¶øδ¾öµÄ¶Áд²Ù×÷¡£
PostMessage ·¢ËÍÏûÏ¢
WaitCommEvent µÈ´ý´®¿Úʼþ·¢Éú
ÓÉÓÚ²ÉÓöàÏ̲߳Ù×÷´®¿Ú£¬»¹Óõ½ÒÔÏÂAPIº¯Êý
CreateEvent   ......
Ŀ¼
===============================================================================
¡Ñ RTTI ¼ò½é
¡Ñ Àà(class) ºÍ VMT µÄ¹Øϵ
¡Ñ Àà(class)¡¢ÀàµÄÀà(class of class)¡¢Àà±äÁ¿(class variable) µÄ¹Øϵ
¡Ñ TObject.ClassType ºÍ TObject.ClassInfo
¡Ñ is ºÍ as ÔËËã·ûµÄÔÀí
¡Ñ TTypeInfo – RTTI ÐÅÏ¢µÄ½á¹¹
¡Ñ »ñÈ¡Àà(class)µÄÊôÐÔ(property)ÐÅÏ¢
¡Ñ »ñÈ¡·½·¨(method)µÄÀàÐÍÐÅÏ¢
¡Ñ »ñÈ¡ÓÐÐòÀàÐÍ(ordinal)¡¢¼¯ºÏ(set)ÀàÐ굀 RTTI ÐÅÏ¢
¡Ñ »ñÈ¡ÆäËüÊý¾ÝÀàÐ굀 RTTI ÐÅÏ¢
===============================================================================
±¾ÎÄÅÅ°æ¸ñʽΪ£º
ÕýÎÄÓÉ´°¿Ú×Ô¶¯»»ÐУ»ËùÓдúÂëÒÔ 80 ×Ö·ûΪ±ß½ç£»ÖÐÓ¢ÎÄ×Ö·ûÒÔ¿Õ¸ñ·û·Ö¸ô¡£
(×÷Õß±£Áô¶Ô±¾ÎĵÄËùÓÐȨÀû£¬Î´¾×÷ÕßͬÒâÇëÎðÔÚÔÚÈκι«¹²Ã½ÌåתÔØ¡£)
ÕýÎÄ
===============================================================================
¡Ñ RTTI ¼ò½é
===============================================================================
RTTI(Run-Time Type Information) ·Òë¹ýÀ´µÄÃû³ÆÊÇ“ÔËÐÐÆÚÀàÐÍÐÅÏ¢”£¬Ò²¾ÍÊÇ˵¿ÉÒÔÔÚÔËÐÐÆÚ»ñ ......