Delphi

±¾ÀàÔĶÁTOP10

¡¤·Ö²¼Ê½ÍøÂ翼ÊÔϵͳԭÐÍ·ÖÎö¼°ÊµÏÖ
¡¤ÓÎÏ·Íâ¹ÒÉè¼Æ¼¼Êõ̽ÌÖ¢Ù
¡¤Ê¹Ó**OOKËæÐļàÊÓWindows
¡¤Delphi Ë®¾§±¨±í´ò°ü½â¾ö
¡¤ÊÔÌâ¿â¿ª·¢ÖзÇÎı¾Êý¾ÝµÄ´¦Àí
¡¤ÈçºÎ½«¼¸¸öDBGRIDÀïµÄÄÚÈݵ¼Èëͬһ¸öEXCEL±íÖÐ....µÄÎÊÌâ
¡¤ÈçºÎʹÓÃDelphiÉè¼ÆÇ¿´óµÄ·þÎñÆ÷³ÌÐò
¡¤¹¤ÈËÏß³ÌÖйرմ°ÌåµÄʵÏÖ
¡¤ÓÃDLL·½Ê½·â×°MDI×Ó´°Ìå¡£
¡¤Ö§³ÖXPÏÂÍÐÅÌÀ¸ÆøÇòÌáʾµÄÍÐÅ̵¥Ôª

¡ú ·ÖÀർº½
VCÓïÑÔDelphi
VBÓïÑÔASP
PerlJava
ScriptÊý¾Ý¿â
ÆäËûÓïÑÔÓÎÏ·¿ª·¢
Îļþ¸ñÊ½ÍøÕ¾ÖÆ×÷
Èí¼þ¹¤³Ì.NET¿ª·¢
ÓÃDLL·½Ê½·â×°MDI×Ó´°Ìå¡£

×÷ÕߣºÎ´Öª À´Ô´£ºÔ¹âÈí¼þÕ¾ ¼ÓÈëʱ¼ä£º2005-6-5¡¡Ô¹âÈí¼þÕ¾

ÓÃDLL·½Ê½·â×°MDI×Ó´°ÌåÊÇÒ»ÖÖ³£ÓõÄÈí¼þ¿ª·¢¼¼Êõ£¬ËüµÄÓŵ㣺

  1. ¿ª·¢ÈËÔ±¿ÉÒÔ¸ºÔðijһ¸öÄ£¿éµÄ±àд°üÀ¨£¨½çÃæ£«Âß¼­£©£¬¿ÉÒÔ»¥²»¸ÉÈÅ£¬Ä£¿é¿ª·¢Íê³Éºó£¬Ö÷³ÌÐòͳһµ÷Óá£
  2. Ò×ÓÚ³ÌÐòÉý¼¶£¬µ±³ÌÐòÉý¼¶Ê±£¬²»ÓñàÒëÖ÷exeÎļþ£¬¸üÐÂij¸öDLL¾Í¿ÉÒÔÉý¼¶¡£
  3. ¿ÉÒÔ¸ù¾Ý¿Í»§²»Í¬µÄÐèÇó¡¢¼ÛÇ®¸øËûÃDz»Í¬µÄÄ£¿é¡££¨¼éÉ̶¼Ô¸ÒâÓÃÕâÕУ©

×î½üÓõ½Õâ¸ö¼¼Êõ£¬ÒòΪСµÜûÓÐÓùý£¬ÔÚÍøÉÏgoogleÁËһϣ¬¶ÔËüÓÐÁËÁ˽⣬ÎÒÓõÄÊÇ»ùÓÚCOMµÄDLL£¬ÏÂÃæ×ܽáÈçÏ£º

ÏëÔÚDLLÖзâ×°MDI×Ó´°Ì壬ҪעÒâÒÔϼ¸µã£º

  1. ÄãµÄDLLÖеĽӿÚÒªÓÐÁ½¸ö²ÎÊý£ºµÚÒ»£¬Ö÷³ÌÐòµÄApplication¶ÔÏó£»µÚ¶þ£¬Ö÷³ÌÐò´°Ìå¶ÔÏó£»
  2. ÄãÒªÖØÐ´DLLÈë¿Úº¯Êý
  3. Èç¹ûÊÇ»ùÓÚCOMµÄ£¬Òª×¢Ò⣺ÒòΪCOMûÓÐTApplicationºÍTFormÀàÐÍ£¬ÄãÔÚ´«ÈëʱÐèҪǿתΪInteger¡£

ÐèҪעÒâµÄ¾ÍÕâô¶à£¬ÏÂÃæ½áºÏÀý×Ó¿´¿´£¨¼ÙÉèÄãÒѾ­½¨Á¢Á˹¤³Ì£©£º

  TComDllTest1 = class(TAutoObject, IComDllTest1)
  Private
    FMsgStr: WideString;
    function GetMDIForm(AForm: TForm): boolean;
  protected
    { Protected declarations }
    function Get_MsgStr: WideString; safecall;
    procedure Set_MsgStr(const Value: WideString); safecall;
    procedure ShowMsgStr; safecall;
    procedure CreateForm(AHandle: SYSUINT); safecall;
    procedure CreateMdiForm(var AApp; AForm: SYSINT); safecall;    //´´½¨MDI´°Ìå SYSINTΪunsigned int
    procedure CreateComTest(AForm: SYSUINT); safecall;
  public
    constructor Create(AForm: SYSINT);
  end;

ÕâÊÇCreateMdiForm·½·¨µÄʵÏÖ£º

procedure TComDllTest1.CreateMdiForm(var AApp; AForm: SYSINT);
var
  app: TApplication;
  af: TForm;

begin
  app := TApplication(AApp);               //½«´«½øÀ´µÄApplication¶ÔÏóǿת
  af := TForm(AForm);                           //½«´«½øÀ´µÄForm¶ÔÏóǿת

  Application := app;                             //½«Ö÷³ÌÐòµÄapplication¸¶¸øCOM¹¤³ÌµÄapplication¶ÔÏó

  if not GetMDIForm(Form1) then        //GetMDIForm ÊÇÅжϴ°ÌåÊÇ·ñÒѾ­´´½¨
  begin
    Form1 := TForm1.Create(af);        //´´½¨×Ó´°Ìå
  Form1.FormStyle := fsMDIChild;
  Form1.Show;
  end;
end;

×îºóÒ»²½Ò²ÊÇ×î¹Ø¼üµÄ¾ÍÊÇÖØÐ´DLLÈë¿Úº¯Êý£¬Èç¹û²»ÖØÐ´£¬¹Ø±ÕÖ÷´°Ìåʱ»á±¨µØÖ·´íÎó£¬ÎҾͳԹýÕâ¿÷£¨ÎÒº¹......£©£¬ÔÚDLL¹¤³ÌÎļþÖÐд£º

procedure DLLUnloadProc(Reason: Integer); register;
begin
 if (Reason = DLL_PROCESS_DETACH) or (Reason = DLL_THREAD_DETACH) then Application := DLLApp;                           //DLLAppÊÇÔÚDLL¹¤³ÌÎļþÖж¨ÒåµÄÈ«¾ÖTApplication¶ÔÏó
                                          //ÓÃÀ´±£´æApplication¶ÔÏó
end;

ÔÚDLL³õʼ»¯µÄλÖüÓÈ룺

   DLLApp:=Application;                                 //±£ÁôApplication
   DLLProc := @DLLUnloadProc;                //½«ÖØÐ´ºóµÄÈë¿Úº¯ÊýµØÖ·¸¶¸øDLLProc

ÕâÑù¾ÍʵÏÖÁËDLL·â×°MDI×Ó´°Ì壬µ±È»ÄãÒªÔÚ×Ó´°ÌåÉϽøÐбÈÈ磺Êý¾Ý¿âµÄ²Ù×÷£¬»¹ÒªÓиü·á¸»µÄ½çÃæ£¬¿Ï¶¨»áÓöµ½¸÷ÖÖÎÊÌâ¡£ÒÔºó×ܽáÁËÔÙ˵°É£¡^_^




Ïà¹ØÎÄÕ£º

Ïà¹ØÈí¼þ£º