الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

محتاج مساعدة في دوال Api

مغلق
بدأه H7SE في 3 سبتمبر 2005 · 6 رد · 616 مشاهدة · في لغة Assembly لأنظمة 16, 32, 64 بت
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

الرجاء القاء نظرة علي هذا النص المأخوذ من "Win32.hlp"

الان ما اريد معرفته ما الذي تعنيه هذه المصطلحات

1-lpbi

2-FAR *psfi

3-psfi

واين يتم في العادة التصريح عن المتغيرات التي تاخذ هذة القيم

مثلا لو كان عندنا Proc واردنا استخدام الدالة SHGetFileInfo اين يتم تعريف المتغير من النوع

SHFILEINFO

هل في نفس جسم الاجراء

او

في قسم Data?

او

في قسم Data

---------------------

كذلك عندي سؤال اخر : متي نستخدم Addr ومتي نستخدم Offset مع العلم انه في بعض الحالات

لا يمكن وضع احداهما مكان الأخر

----------------------

معلش استحملوني سؤال اخر

ما الفرق بين

mov eax,offset var1

lea eax,var

------------------------تابع للسؤال الاول----

Displays a dialog box that enables the user to select a shell folder.

WINSHELLAPI LPITEMIDLIST WINAPI SHBrowseForFolder(
    LPBROWSEINFO lpbi	
   );	

Parameters
	lpbi
	Pointer to a BROWSEINFO structure that contains information used to display the dialog box.

	--------------------------------------------------------------------------------------------------------------------------------------------------

Retrieves information about an object in the file system, such as a file, a folder, a directory, or a drive root.

WINSHELLAPI DWORD WINAPI SHGetFileInfo(
    LPCTSTR pszPath,  
    DWORD dwFileAttributes,  
    SHFILEINFO FAR *psfi,  
    UINT cbFileInfo,  
    UINT uFlags	
   );	

Parameters
	pszPath
  Pointer to a buffer that contains the path and filename. Both absolute and relative paths are valid. If uFlags includes the SHGFI_PIDL, value pszPath must be the address of an ITEMIDLIST structure that contains the list of item identifiers that uniquely identifies the file within the shell's name space. 
  This string can use either short (the 8.3 form) or long filenames.

	dwFileAttributes
  Array of file attribute flags (FILE_ATTRIBUTE_ values). If uFlags does not include the SHGFI_USEFILEATTRIBUTES value, this parameter is ignored.

	psfi and cbFileInfo
  Address and size, in bytes, of the SHFILEINFO structure that receives the file information. 

	uFlags
  Flag that specifies the file information to retrieve. This parameter can be a combination of the following values:

تم تعديل هذه المشاركة بواسطة H7SE في 3 سبتمبر 2005 في 22:44

#2

السلام عليكم

اجابة السؤال الاول . كل متغير يبداء بالاحرف lp يعنى long pointer وفى اغلب الاحيان يكون هذا المؤشر لمتغير من نوع structure وفى هذه الحاله هو المتغير التالى

typedef struct _browseinfo {
    HWND hwndOwner;
    LPCITEMIDLIST pidlRoot;
    LPTSTR pszDisplayName;
    LPCTSTR lpszTitle;
    UINT ulFlags;
    BFFCALLBACK lpfn;
    LPARAM lParam;
    int iImage;
} BROWSEINFO, *PBROWSEINFO, *LPBROWSEINFO;

والذى تجد له الشرح الكامل على هذا العنوان:

http://msdn.microsoft.com/library/default..../browseinfo.asp

السؤال الثانى . الoffset تستخدم دائماً عدا عند إستخدام invoke, و addr تستخدم داخل الداله invoke وكلاهما له تقريباً نفس الوظيفه تقريباً ...

السؤال الثالث. لايوجد فرق بين الدالتين فهما يقومان بنفس العمليه وهى وضع عنوان المتغير فى المسجل eax ..

والسلام عليكم

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#3

شكرا أخي أحمد علي الرد

في نفس الموضوع هل معني long انه يجب التصريح عن المتغير في قسم الداتا وليس كمتغير محلي

وماذا عن

FAR *psfi

3-psfi

وكذلك نفس السؤال السابق بالنسبة ل FAR مع العلم انقي قمت باستخدام SHBrowseForFolder ولم تنجح الدالة الا عندما قمت بتعريف متغير من browseinfo في قسم الداتا

#4

العفو اخى ..

المتغيرات تستطيع ان تستخدمها محلى و فى قسم الداتا ولكن إذا إستخدمتها محلى فيجب عليك ان لا تستدعيها من داله اخرى لانك لن تصل إليها سوى من داخل الداله نفسها ..

بالنسبه للمؤشرات فلا توجد مؤشرات فى لغة الاسمبلى ولكن نستخدم العناوين وهى بسعة 32 بت, لذلك كلمة far وكلمة near لا اصل لها فى لغة الاسمبلى 32 لاننا نتعامل معى نظام flat فى هذه البيئة..

3-psfi لا اعرف معناها ولم ارها من قبل..

الداله SHBrowseForFolder لن تستطيع إستخدامها إلا بعد تعريف الداله browseinfo لانها جزء من الداله SHBrowseForFolder لانك لو حاولت ذلك فالمترجم يعتبر الداله ناقصه ولن يسمح لك بإستخدامها..

والسلام عليكم

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#5

شكرا جزيلا اخي أحمد بارك الله فيك

----------------------------------------

هنا يبدو اني لم اوضح الفكرة

اقتباس
وكذلك نفس السؤال السابق بالنسبة ل FAR مع العلم انقي قمت باستخدام SHBrowseForFolder ولم تنجح الدالة الا عندما قمت بتعريف متغير من browseinfo في قسم الداتا

انا قصدت اني عندما استخدمت الدالة SHBrowseForFolder وقمت بتعريف متغير من browseinfo كمتغير محلي(LOCAL) كانت تحدث مشكلة

ولكن عند تعريف المتغير في قسم الداتا تنتهي هذه المشكلة واردت معرفة الفكرة وراء ذلك او السبب في حدوث هذه المشكلة

ShowBrowseDialog proc Owner:DWORD, Root:DWORD, Description:DWORD,OkUniText:DWORD ,Flags:DWORD
	CpuM2m bi.hwndOwner,Owner
	invoke SHGetSpecialFolderLocation,Owner,Root,offset RetSpPIDL
  .if eax == NOERROR 
 	 CpuM2m bi.pidlRoot, RetSpPIDL
  .endif
	CpuM2m bi.lpszTitle, Description
	mov bi.pszDisplayName, NULL
	mov eax, Flags
  Or bi.ulFlags, eax
	CpuM2m bi.lpfn,offset ShowBrowseDialogCallBack
	CpuM2m bi.lParam,OkText
	invoke SHBrowseForFolder,offset bi
	.if eax != NULL
  push eax
  invoke SHGetPathFromIDList,eax,offset temp_266
  pop eax
 	 invoke CoTaskMemFree, eax	;Free PIDL
  mov eax,offset temp_266	
	.endif
  ret
ShowBrowseDialog endp


CpuM2m macro Des,Src
	mov eax, Src
  mov Des, eax
endm

ShowBrowseDialogCallBack proc DialogHandle:HWND,uMsg:UINT,lParam:LPARAM,lpData:LPARAM
	.if uMsg == BFFM_INITIALIZED
  invoke SendMessage,DialogHandle,BFFM_SETOKTEXT,0,lpData
	.endif
	ret
ShowBrowseDialogCallBack endp
#6

اعتقد والله اعمل ان برنامجك يستخدم المتغير browseinfo من خارج الداله لذلك يجب عليك التاكد من ان المتغير لا يستخدم سوى من داخل الدله وإلا فسوف يحتج المترجم على ذلك, وياريت ترفق نص الخلل حتى استطيع معرفة السبب

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#7

:) :) :)

شكرا أخي أحمد ..

هذا الموضوع مغلق.

مواضيع مشابهة