Ê×ÏÈÎÒÃÇÖªµÀ¡£Ò»¸ö×é¼þ°üÏëÒªÄÜÔÚ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»¿É·Ö¸îµÄÒ»²¿·Ö,Èç¹ûÄúÒª×ªÔØ±¾ÎÄÕÂ,Çë±£ÁôÒÔÉÏÐÅÏ¢£¬Ð»Ð»!




