ÓÃDLL·½Ê½·â×°MDI×Ó´°ÌåÊÇÒ»ÖÖ³£ÓõÄÈí¼þ¿ª·¢¼¼Êõ£¬ËüµÄÓŵ㣺 - ¿ª·¢ÈËÔ±¿ÉÒÔ¸ºÔðijһ¸öÄ£¿éµÄ±àд°üÀ¨£¨½çÃæ£«Âß¼£©£¬¿ÉÒÔ»¥²»¸ÉÈÅ£¬Ä£¿é¿ª·¢Íê³Éºó£¬Ö÷³ÌÐòͳһµ÷Óá£
- Ò×ÓÚ³ÌÐòÉý¼¶£¬µ±³ÌÐòÉý¼¶Ê±£¬²»ÓñàÒëÖ÷exeÎļþ£¬¸üÐÂij¸öDLL¾Í¿ÉÒÔÉý¼¶¡£
- ¿ÉÒÔ¸ù¾Ý¿Í»§²»Í¬µÄÐèÇó¡¢¼ÛÇ®¸øËûÃDz»Í¬µÄÄ£¿é¡££¨¼éÉ̶¼Ô¸ÒâÓÃÕâÕУ©
×î½üÓõ½Õâ¸ö¼¼Êõ£¬ÒòΪСµÜûÓÐÓùý£¬ÔÚÍøÉÏgoogleÁËһϣ¬¶ÔËüÓÐÁËÁ˽⣬ÎÒÓõÄÊÇ»ùÓÚCOMµÄDLL£¬ÏÂÃæ×ܽáÈçÏ£º ÏëÔÚDLLÖзâ×°MDI×Ó´°Ì壬ҪעÒâÒÔϼ¸µã£º - ÄãµÄDLLÖеĽӿÚÒªÓÐÁ½¸ö²ÎÊý£ºµÚÒ»£¬Ö÷³ÌÐòµÄApplication¶ÔÏó£»µÚ¶þ£¬Ö÷³ÌÐò´°Ìå¶ÔÏó£»
- ÄãÒªÖØÐ´DLLÈë¿Úº¯Êý
- Èç¹ûÊÇ»ùÓÚ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×Ó´°Ì壬µ±È»ÄãÒªÔÚ×Ó´°ÌåÉϽøÐбÈÈ磺Êý¾Ý¿âµÄ²Ù×÷£¬»¹ÒªÓиü·á¸»µÄ½çÃæ£¬¿Ï¶¨»áÓöµ½¸÷ÖÖÎÊÌâ¡£ÒÔºó×ܽáÁËÔÙ˵°É£¡^_^ 
|