PDA

View Full Version : تغیر آدرس dll ایستا



baran_2005
پنج شنبه 09 مهر 1388, 10:58 صبح
سلام
من می خواهم dll را که در برنامه تعریف می کنم در قسمت external مسیر system32 ویندوز را بدهم اما مسیر نصب ویندوز را در قبل از بدنه اصلی برنامه چه طوری می تونم به دست بیارم . باتشکر از دوستان

Saeed_m_Farid
پنج شنبه 09 مهر 1388, 13:39 عصر
سلام
من می خواهم dll را که در برنامه تعریف می کنم در قسمت external مسیر system32 ویندوز را بدهم اما مسیر نصب ویندوز را در قبل از بدنه اصلی برنامه چه طوری می تونم به دست بیارم . باتشکر از دوستان
سلام
واسه فایلهای dll موجود تو این پوشه لازم نیست مسیر بدین، فقط نام فایل dll رو بنویسید کافیه ...
ولی اگه میخواهید حتماً مسیر system32 رو بدست بیارید من اینکار رو میکنم :
ExtractFilePath(GetEnvironmentVariable('COMSPEC'))
یا
GetEnvironmentVariable('SYSTEMROOT') + '\System32\'

baran_2005
شنبه 11 مهر 1388, 09:04 صبح
منظور من این نبود من می خواهم قبل از دستور implementation در برنامه که پروسیژر را تعریف می کنم مسیر را به آن بدهم . به عنوان مثال


Procedure SetUserName(Value:pchar);StdCall;external 'RequestDLL.dll';
var
Form2: TForm2;

implementation

Saeed_m_Farid
شنبه 11 مهر 1388, 14:47 عصر
منظور من این نبود من می خواهم قبل از دستور implementation در برنامه که پروسیژر را تعریف می کنم مسیر را به آن بدهم . به عنوان مثال


Procedure SetUserName(Value:pchar);StdCall;external 'RequestDLL.dll';
var
Form2: TForm2;

implementation

منظور من هم همین بود، عرض کردم لازم نیست مسیر بدین، dll شما باید تو یک مسیر قابل رویت باشه.
یعنی : یا تو system32 یا کنار برنامه؛ فرقی نمی کنه (واسه فایل dll هیچ کس مسیر نمیده، معمولاً یه const تعریف می کنن، و بصورت زیر عمل می کنند :
const
mydll = 'RequestDLL.dll';
//...

implementation
//...
Procedure SetUserName(Value: PChar); external mydll name 'SetUserName';
//...

بعنوان نمونه توابع user32 تو یونیت Windows در مسیر زیر رو نگاه کنید :

Delphi7 :
%SYSTEMDRIVE%:\Program Files\Borland\Delphi7\Source\Rtl\Win\Windows.pas

Delphi2kx :
%SYSTEMDRIVE%:\Program Files\Borland\BDS\4.0\source\Win32\rtl\win\Windows .pas

در ضمن اگه میدونید فایل کجاست و تو پوشه system32 یا کنار برنامه هم نیست، می تونید یه Environment Variable واسه مسیر موردنظر تو سیستم تعریف کنید و به این ترتیب همه برنامه ها، می تونن مسیر موردنظر رو ببینن (مثلاً در Setup و یا یه یونیت دلفی که اگه با GetEnvironmentVariable مسیر موردنظر رو پیدا نکرد با SetEnvironmentVariable اون رو تعریف کنید) ...

baran_2005
یک شنبه 12 مهر 1388, 10:56 صبح
واقعا ممنون من dll های مورد نظرم و داخل پوشه ویندوز قرار دادم و در زمان external هم تنها نام dll را دادم مشکلم حل شد .