ÊÖ»úÕ¾
ÍøÍ¨·ÖÕ¾
µçÐÅÖ÷Õ¾
ÃÜ¡¡Âë:
Óû§Ãû£º
µ±Ç°Î»Öà : Ö÷Ò³>³ÌÐòÉè¼Æ>delphi>Áбí

¶¯Ì¬¼ÓÔØºÍ¶¯Ì¬×¢²áÀ༼ÊõµÄÉîÈë̽Ë÷

À´Ô´£º»¥ÁªÍø ×÷ÕߣºÎ÷²¿ÊýÂë ʱ¼ä£º2008-04-09
Î÷²¿ÊýÂë-È«¹úÐéÄâÖ÷»ú10Ç¿£¡40ÓàÏîÐéÄâÖ÷»ú¹ÜÀí¹¦ÄÜ,È«¹úÁìÏÈ!Ë«Ïß¶àÏßÐéÄâÖ÷»úÄϱ±·ÃÎʳ©Í¨ÎÞ×è!Ãâ·ÑÔùËÍÆóÒµÓʾÖ,.CNÓòÃû,×ÔÖú½¨Õ¾480ÔªÆð,Ãâ·ÑÊÔÓÃ7Ìì,ÂúÒâÔÙ¸¶¿î! P4Ö÷»ú×âÓÃ799Ôª/ÔÂ.Ô¸¶Ãâѹ½ð!
DelphiµÄ°üÊÇDelphi IDEµÄºËÐļ¼Êõ£¬Ã»ÓаüÒ²¾ÍûÓÐÁËDelphiµÄ¿ÉÊÓ»¯±à³Ì¡£°üÒ²¿ÉÒÔÓÃÔÚÎÒÃÇ¿ª·¢µÄÏîÄ¿ÖУ¬ÆäºÃ´¦ÊÇ¿ÉÒÔ´úÂë¹²Ïí£¬¼õС¹¤³Ì³ß´ç£¬µ¥´¿Í¨¹ýÌæ»»°üÎļþ¾ÍÄÜʵÏÖ¹¤³ÌµÄÉý¼¶ºÍ²¹¶¡¡£µ«ÊÇÎÒÃÇÒª¼ÓÔØ°ü£¬¾ÍÒªÖªµÀ°üÖÐÒѾ­´æÔÚµÄÀà¡£¹ØÓÚÈçºÎ¶¯Ì¬¼ÓÔØ°üµÄ×ÊÁϱȱȽÔÊÇÎҾͲ»Ïë¾Í´ËÎÊÌâÌÖÂÛÁË¡£µ«ÊÇDelphiµÄIDEºÜÊÇÌØÊ⣬ËüÎÞÐèÊÂÏÈÖªµÀÄãµÄ°üÓÐÄÄЩÀà¾ÍÄÜ×¢²á×齨£¬´´½¨×齨¡£µ«ÊÇBorlandûÓй«¿ªBPLÎļþµÄ¸ñʽ¡£ÎÒÃÇ×Ô¼ºÊÇ·ñ¿ÉÒÔʵÏÖIDEµÄ¹¦ÄÜÄØ£¿
Ê×ÏÈÎÒÃÇÖªµÀ¡£Ò»¸ö×é¼þ°üÏëÒªÄÜÔÚIDEÖÐʹÓþÍÒª½øÐÐ×¢²áÒ²¾ÍÊÇÒª´´½¨Ò»¸ö¹ý³ÌÀýÈ磺
Procedure Register£»
Begin
RegisterComponents(IDEÖеÄÒ³Ãæ, [×é¼þÀà]);
End;
ÔÚIDE¼ÓÔØÊ±¾ÍÒªµ÷ÓÃÕâ¸ö¹ý³Ì½øÐÐ×¢²á¡£
Æä´ÎÎÒÃÇͨ¹ýBorlandµÄÎĵµÓÖÖªµÀBPLÖ»ÊÇÒ»ÖÖÌØÊâ¸ñʽµÄDLLÎļþ¡£ÄÇô¼ÈÈ»IDE¿ÉÒÔµ÷Óõõ½×¢²á¹ý³ÌÄÇôע²á¹ý³ÌÒ»¶¨ÒªÊǵ¼³öÀàÐÍ£¨exports£©µÄ²ÅÐС£¼ÈÈ»Èç´ËÎÒÃÇ¿ÉÒÔÏë°ì·¨ÅªÃ÷°×¡£Ð´Ò»¸ö°üÎļþ¡£ÀïÃæ°üº¬Test¡¢ºÍTestBtnÁ½¸öµ¥Ôª¡£Á½¸öµ¥Ôª·Ö±ð¶¼ÓÐ×¢²á¹ý³Ì£¬È»ºó±àÒë³ÉBPLÎļþ¡£ºÃÁËÎÒÃÇ¿ÉÒÔÓÃEXESCOPEÕâ¸ö¹¤¾ßÀ´ÅªÇå³þÆäÖеİÂÃØ¡£

ÎÒÃÇ¿ÉÒÔ¿´µ½Ò»¸öº¯Êý@Test@Register$qqrv¡£¼¸ºõ¿ÉÒԿ϶¨Õâ¸öº¯Êý¾ÍÊÇBPL°ÑTestµ¥ÔªÖеÄRegisterµ¼³öµÄ×¢²áº¯Êý£¬¶øÄǸö@Testbtn@Register$qqrv¾ÍÒ»¶¨ÊÇTestbtnÕâ¸öµ¥ÔªµÄ×¢²áº¯Êý¡£¿ÉÒÔ×öÒ»¸öʵÑéÀ´Ö¤Ã÷ÎÒÃǵÄÏë·¨£¬ÔÚTestµ¥ÔªµÄRegisterµÄº¯ÊýÖмÓÉÏShowMessage(‘ÄãºÃ£¬Äãµ÷ÓÃÁË×¢²áº¯Êý’);
È»ºóÔÚÎÒÃÇÀ´µ÷ÓÃһϰüÖеĺ¯Êý@Test@Register$qqrv£¬Ëæ±ãдһ¸ö¹¤³Ì¿´¿´ÊDz»ÊÇ¿ÉÒÔµ÷Óõõ½Testµ¥ÔªÖеÄRegister¹ý³Ì¡£
var
H : Integer;
regproc : procedure();
begin
H := 0;
H := LoadPackage(''''TestPackage.bpl'''');
try
if H <> 0 then
begin
RegProc := GetProcAddress(H,''''@Test@Register$qqrv'''');//ÔØÈë°üÖеĺ¯Êý
if Assigned(RegProc) then
begin
regproc();//µ÷Óú¯Êý
end;
end;
finally
if H <> 0 then
begin
UnloadPackage(H);
H := 0;
end;
end;
end;
µ÷ÓõĽá¹û£¬¹ûÈ»µ÷Óõ½Á˰üÖÐTerstµ¥ÔªµÄRegister¹ý³Ì¡£µ«ÊÇÈçºÎµÃµ½×¢²áÁËÄÄЩÀàÄØ£¿×¢²á×é¼þÒªÓÃRegisterComponentsº¯Êý¡£ºÃÔÚVCLÌåϵµÄÔ´´úÂëÊÇ¿ª·ÅµÄ£¬ÎÒÃÇ¿´¿´RegisterComponentsÊÇÈçºÎʵÏֵİɡ£
ÔÚClassesµ¥ÔªÎÒÃÇ¿ÉÒÔ¿´µ½£º
procedure RegisterComponents(const Page: string;
const ComponentClasses: array of TComponentClass);
begin
if Assigned(RegisterComponentsProc) then
RegisterComponentsProc(Page, ComponentClasses)
else
raise EComponentError.CreateRes(@SRegisterError);
end;
»­ÏßµÄÊÇÒ»¸öº¯ÊýÖ¸Õ룬DelphiµÄIDE¾ÍÊÇÔÚÕâ¸öÖ¸ÕëËùÖ¸µÄº¯ÊýÀïÈ¥×÷¾ßÌåµÄ¹¤×÷¡£ÎÒÃÇÒ²¿ÉÒÔÀûÓÃËüÀ´ÊµÏÖÎÒÃǵÄ×¢²á¡£
procedure MyRegComponentsProc(const Page: string;
const ComponentClasses: array of TComponentClass);
var
I : Integer;
IDEInfo : PIDEInfo;
begin
for i := 0 to High(ComponentClasses) do
begin
RegisterClass(ComponentClasses[I]);
end;
end;
È»ºóÒ»ÌõÓï¾äRegisterComponentsProc:= @MyRegComponentsProc;ËÆºõ¾Í½â¾öÎÊÌâÁË¡£
Âý×Å£¡RegisterComponentsProcÊÇÔÚClassesµ¥Ôª¡£µ«ÊÇBPLÖеÄClassesµ¥ÔªÊÇÔÚÁíÒ»¸öÔËÐÐʱµÄ°üVCL.BPLÀïÃæ¡£¶øÎÒÃǹ¤³ÌËùÐ޸ĵÄRegisterComponentsProcµÄÖ¸ÕëÊDZàÒëÔÚÎÒÃǵŤ³ÌÖУ¬¿Õ¼äÊDz»Í¬µÄ¡£ËùÒÔÎÒÃǵŤ³ÌÒ»¶¨Òª±àÒë³É´øÔËÐÐʱ°üVCL.BPLµÄ²ÅÐС£µ«ÊÇÕâÑùÒ»À´µÄ»°ÎÒÃÇÒ²¾ÍÖ»ÄÜÔØÈëºÍÎÒÃÇËùÓõıàÒëÆ÷Ïàͬ°æ±¾±àÒëÆ÷±àÒë³öÀ´µÄBPLÎļþÁË£¬Ò²¾ÍÊÇ˵Delphi6Ö»ÄÜÔØÈëDelphi6»òÕßBCB6±àÒë³öÀ´µÄBPLÎļþÒÔ´ËÀàÍÆ¡£
µ«ÊÇ»¹ÓÐÒ»¸öÎÊÌâûÓнâ¾ö£¬ÄǾÍÊÇÈçºÎÖªµÀÒ»¸ö°üÖе½µ×ÓÐÄÇЩ¸÷µ¥ÔªÄØ£¿¿ÉÒÔͨ¹ýGetPackageInfo¹ý³ÌÀ´»ñµÃ¡£
ÎÒÒѾ­°Ñ¼ÓÔØ°üµÄ¹ý³Ì·â×°µ½ÁËÒ»¸öÀàÖС£Õû¸ö³ÌÐòµÄ´úÂëÈçÏ£º

{ *********************************************************************** }
{ }
{ ¶¯Ì¬¼ÓÔØPackageµÄÀà }
{ }
{ wr960204(ÍõÈñ)2003-2-20 }
{ }
{ *********************************************************************** }
unit UnitPackageInfo;

interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
PIDEInfo = ^TIDEInfo;
TIDEInfo = record
iClass: TComponentClass;
iPage: string;
end;
type
TPackage = class(TObject)
private
FPackHandle: THandle;
FPackageFileName: string;
FPageInfos: TList;
FContainsUnit: TStrings; //µ¥ÔªÃû
FRequiresPackage: TStrings; //ÐèÒªµÄµÄ°ü
FDcpBpiName: TStrings; //
procedure ClearPageInfo;
procedure LoadPackage;
function GetIDEInfo(Index: Integer): TIDEInfo;
function GetIDEInfoCount: Integer;
public
constructor Create(const FileName: string); overload;
constructor Create(const PackageHandle: THandle); overload;
destructor Destroy; override;
function RegClassInPackage: Boolean;

property IDEInfo[Index: Integer]: TIDEInfo read GetIDEInfo;

ÎÄÕÂÕûÀí£ºÎ÷²¿ÊýÂë--רҵÌṩÓòÃû×¢²á¡¢ÐéÄâÖ÷»ú·þÎñ
http://www.west263.com
ÒÔÉÏÐÅÏ¢ÓëÎÄÕÂÕýÎÄÊDz»¿É·Ö¸îµÄÒ»²¿·Ö,Èç¹ûÄúÒª×ªÔØ±¾ÎÄÕÂ,Çë±£ÁôÒÔÉÏÐÅÏ¢£¬Ð»Ð»!