حمیدرضاصادقیان
دوشنبه 14 اسفند 1385, 08:21 صبح
سلام دوستان. در بعضی از سورسهای یونیت ها کدهایی مثل کد زیر دیده میشه
function GetPackageModuleHandle(PackageName: PChar): HMODULE;
var
PkgName: array[0..MAX_PATH] of Char;
function CheckPackageName(linkmap: plink_map): Boolean;
var
BaseName: PChar;
begin
Result := True;
if linkmap.l_name <> nil then
begin
// Locate the start of the actual filename
BaseName := StrRScan(linkmap.l_name, PathDelim);
if BaseName = nil then
BaseName := linkmap.l_name // If there is no path info, just use the whole name
else Inc(BaseName); // The filename is actually located at BaseName+1
Result := StrPos(BaseName, PkgName) = nil;
end;
end;
procedure MakePkgName(Prefix, Name: PChar);
begin
StrCopy(PkgName, Prefix);
StrLCat(PkgName, Name, sizeof(PkgName)-1);
PkgName[High(PkgName)] := #0;
end;
begin
if (PackageName = nil) or (StrScan(PackageName, PathDelim) <> nil) then
Result := 0
else
begin
MakePkgName('bpl', PackageName); // First check the default prefix
Result := InitModule(ScanLinkMap(@CheckPackageName));
if Result = 0 then
begin
MakePkgName('dcl', PackageName); // Next check the design-time prefix
Result := InitModule(ScanLinkMap(@CheckPackageName));
if Result = 0 then
begin
MakePkgName('', PackageName); // finally check without a prefix
Result := InitModule(ScanLinkMap(@CheckPackageName));
end;
end;
end;
end;
حالا میخواستم بدونم تفاوت این کد با اینکه ما این دو تابع و پروسیجر رو در اول برنامه ایجاد کرده و در داخل این تابع صدا بزنیم چیه؟ چه فرقی باهم دارند.و بیشتر در چه مواردی استفاده میشوند.
function GetPackageModuleHandle(PackageName: PChar): HMODULE;
var
PkgName: array[0..MAX_PATH] of Char;
function CheckPackageName(linkmap: plink_map): Boolean;
var
BaseName: PChar;
begin
Result := True;
if linkmap.l_name <> nil then
begin
// Locate the start of the actual filename
BaseName := StrRScan(linkmap.l_name, PathDelim);
if BaseName = nil then
BaseName := linkmap.l_name // If there is no path info, just use the whole name
else Inc(BaseName); // The filename is actually located at BaseName+1
Result := StrPos(BaseName, PkgName) = nil;
end;
end;
procedure MakePkgName(Prefix, Name: PChar);
begin
StrCopy(PkgName, Prefix);
StrLCat(PkgName, Name, sizeof(PkgName)-1);
PkgName[High(PkgName)] := #0;
end;
begin
if (PackageName = nil) or (StrScan(PackageName, PathDelim) <> nil) then
Result := 0
else
begin
MakePkgName('bpl', PackageName); // First check the default prefix
Result := InitModule(ScanLinkMap(@CheckPackageName));
if Result = 0 then
begin
MakePkgName('dcl', PackageName); // Next check the design-time prefix
Result := InitModule(ScanLinkMap(@CheckPackageName));
if Result = 0 then
begin
MakePkgName('', PackageName); // finally check without a prefix
Result := InitModule(ScanLinkMap(@CheckPackageName));
end;
end;
end;
end;
حالا میخواستم بدونم تفاوت این کد با اینکه ما این دو تابع و پروسیجر رو در اول برنامه ایجاد کرده و در داخل این تابع صدا بزنیم چیه؟ چه فرقی باهم دارند.و بیشتر در چه مواردی استفاده میشوند.