ورود

View Full Version : گرفتن Resource Identifier فایل های افزوده شده به ریسورس برنامه



Win_RT
دوشنبه 05 تیر 1391, 09:18 صبح
سلام.چجوزی می تونم Resource Identifier همه فایلای افزوده شده به ریسورس برنامه رو بگیرم.

Mask
دوشنبه 05 تیر 1391, 12:35 عصر
برای خارج کردن فایلهای موجود در فایلهای ریسورس ، میتونید از برنامه ResourceEditor استفاده کنید.

Win_RT
دوشنبه 05 تیر 1391, 14:05 عصر
دوست من نمی خوام Export کنم.می خوام اسمشونو بگیرم و باهاشون کار دارم.

Mask
دوشنبه 05 تیر 1391, 14:41 عصر
این 2 پست رو قبلا دیدید؟
http://barnamenevis.org/showthread.php?187090-%D8%B3%D8%A7%D8%AE%D8%AA-%D9%81%D8%A7%DB%8C%D9%84%D9%87%D8%A7%DB%8C-Resource-%D9%88-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%A2%D9%86%D9%87%D8%A7&p=837867&viewfull=1#post837867
http://delphi.about.com/od/objectpascalide/a/embed_resources.htm

Win_RT
دوشنبه 05 تیر 1391, 14:57 عصر
الان یه نگاهی انداختم،ببینید فک میکنم جواب من باید یه حلقه باشه،

Felony
دوشنبه 05 تیر 1391, 17:58 عصر
برنامه ای که میخواین لیست ریسورس های اون رو بگیرید خودتون نوشتید ؟ اگر بله نگاهی به سورس Silver Install Maker که قبلا قرار داده بودم بندازید .

Win_RT
دوشنبه 05 تیر 1391, 20:47 عصر
خاک تو سرم،فک کنم نتونستم منظورمو برسونم؛بابا سوال من ساده تر از این حرفاست،ببینید من الان دارم یه برنامه می نویسم،کاری که می خوام انجام بدم export کردن و انجام کارهایی دیگه روی فایلای ریسورس همین پروژه ای که دارم کار میکنم هست:اشتباه:

Felony
دوشنبه 05 تیر 1391, 22:28 عصر
باید از تابع EnumResourceNames که یک Callback Function هست استفاده کنید :

function EnumRCDataProc(hModule: hModule; lpszType, lpszName: PChar;
lParam: NativeInt): BOOL; stdcall;
begin
TStrings(lParam).Add(lpszName);
Result := True;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
k: Integer;
L: TStringList;
begin
L := TStringList.Create;
try
EnumResourceNames(0, RT_RCDATA, @EnumRCDataProc, NativeInt(L));
ShowMessage(L.Text);
finally
L.Free;
end;
end;

Win_RT
دوشنبه 05 تیر 1391, 22:52 عصر
ببخشید،دو تا سوال؛چرا موقع فراخونی EnumRCDataProc هیچ آرگومنتی ارسال نمیشه،دوم اینکه @ به چه معناست

Felony
دوشنبه 05 تیر 1391, 23:04 عصر
ببخشید،دو تا سوال؛چرا موقع فراخونی EnumRCDataProc هیچ آرگومنتی ارسال نمیشه
چون EnumResourceNames یک Callback Function هست ، Callback Function ها توابعی هستند که در برنامه تعریف میشن و توسط سیستم عامل صدا زده میشن ، اگر دقت کنید در انتهای اعلان تابع stdcall اومده که به همین معنا هست ، شما اون تابع رو صدا نزدید که بهش مقدار بدید ، این سیستم عامل هست که داره اون تابع رو صدا میزنه و خودش هم به پارامترهاش مقدار میده .


دوم اینکه @ به چه معناست
اشاره گر هست ، با اون کد آدرس تابعی که نوشتیم رو به EnumResourceNames تحویل دادیم و به ویندوز گفتیم به ازای هر ریسورس در فایل مورد نظر ما باید تابعی که آدرسش رو بهت دادیم اجرا کنی ، ویندوز هم به ازای هر فایل یک بار اون تابع رو اجرا میکنه و نام فایل ها و ... رو به عنوان پارامتر به تابع ما میفرسته و ما داخل تابع اونها رو در StringList مون درج میکنیم .

Enum مخفف واژه Enumerate به معنای "یکایک شمردن" هست ؛ CallBack function هایی که نامشون با Enum آغاز میشه وظیفه دارن تا به ازای هر مورد ( بسته به کارکرد تابع ) یک بار تابع معرفی شده توسط برنامه نویس رو صدا بزنن .