delphi4arab منتديات دلفي للعرب

نسخة كاملة : الدالة : CreateFile
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم و رحمة الله و بركاته ,,

ممكن شرح الباراماتر الرابع للدالة :

كود :
Function [color=Red]CreateFile[/color](lpFileName: PChar; dwDesiredAccess, dwShareMode: DWORD; lpSecurityAttributes: PSecurityAttributes; dwCreationDisposition, dwFlagsAndAttributes: DWORD; hTemplateFile: THandle): THandle; stdcall;

lpSecurityAttributes : لم أفهم منه غير أنه عبارة على مؤشر نحو

SECURITY_ATTRIBUTES ??:mad: .

و جازاكم الله كل خير .
طبعا أخي الكريم فهو مؤشر نحو SECURITY_ATTRIBUTES structure الدي بدوره يحدد المقبض العائد(returned)

هل سيتم وراتثه من طرف processes الابناء

ادا كان lpSecurityAttributes يؤشر على nil فان المقبض لن تتم وراتثه
me&delphi' كتب :طبعا أخي الكريم فهو مؤشر نحو SECURITY_ATTRIBUTES structure الدي بدوره يحدد المقبض العائد(returned)

هل سيتم وراتثه من طرف processes الابناء

ادا كان lpSecurityAttributes يؤشر على nil فان المقبض لن تتم وراتثه

1- تقصد مقبض الملف انو المنفذ في حالة نجاح الدالة ’’ + ما هي طبيعة التحديد .

2- ممكن توضح أكثر (المقبض لن تتم وراتثه) يعني لن نستطيع تمريره لـ SetFilePointer/Read&WriteFile

بارك الله فيك .
هدا البارامتر أخي الكريم اختياري ولست ملزم به

وأحسن شرح وهو لمبرمج الدالة http://msdn.microsoft.com/en-us/library/...S.85).aspx
نعم كنت على دراية به لكن **** توضيح مقنع فقط ... بارك الله فيك .
بالرغم من أن الـ lpSecurityAttributes = Nil

لكنه يمرر الناتج (مقبض Hwnd) للدالة : SetFilePointer ???.

هذا باتشر بسيط برمجته فقط للتجربة :

كود :
Program Test; {$R Res.res} {$HINTS Off} {$OPTIMIZATION On} {$WARNINGS Off} Uses Windows; Const ID_Bmp = 100; Var CrFileResult: Hwnd; Buf: Byte; BytesR: Dword; Function Int2Hex(DecValue: Integer): string; Const HexV = '0123456789ABCDEF'; begin Repeat case DecValue mod 16 of 0..15: Result := HexV[DecValue mod 16 + 1] + Result; End; DecValue := DecValue div 16; Until DecValue = 0; End; Function WindowProc(hWnd: hWnd; uMSG: DWord; wParam: wParam; lParam: lParam): Bool; stdcall; Begin Result := True; Case uMSG of $0010: //WM_CLOSE EndDialog(hWnd, GetLastError); $0002: //WM_DESTROY PostQuitMessage(GetLastError); $0111: //WM_COMMAND: Case wParam and $FFFF of 10: ExitProcess(0); 11: Begin CrFileResult := CreateFile('000.Exe', GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); If CrFileResult <> INVALID_HANDLE_VALUE then Begin SetFilePointer(CrFileResult, 2, nil, 0); ReadFile(CrFileResult, Buf, 1, BytesR, nil); MessageBox(0, PChar('$' + Int2Hex(Buf)), '', $40 + $2000 + $00); CloseHandle(CrFileResult); End; End; End; Else Result := False; End; End; Begin DialogBoxParam(HInstance, PChar(666), 0, @WindowProc, 0); End.

المهم أيمكن أن يكون Buffer يعني متغير ليس له نمط محدد
لأنه يمكن أن يأخذ قيمة Boolean و Pointer ؟؟؟ في نفس الوقت ؟؟.