




السمعة:
السلام عليكم ورحمه الله وبركاته
هذا موضوع مهم جداً
# أنواع البيانات الأساسية في دوال نظام ويندوز بلغة C
عند برمجة تطبيقات ويندوز باستخدام لغة C وواجهة WinAPI، ستواجه مجموعة من أنواع البيانات المحددة التي طورتها مايكروسوفت لضمان التوافق بين إصدارات ويندوز المختلفة (32-bit و64-bit). إليك أهم هذه الأنواع:
## 1. الأنواع الأساسية (Basic Types)
| النوع في WinAPI | النوع في C | الوصف | الحجم (بايت) |
|----------------|----------|-------|-------------|
| `BOOL` | `int` | قيمة منطقية (TRUE/FALSE) | 4 |
| `BOOLEAN` | `unsigned char` | قيمة منطقية (مختلفة عن BOOL) | 1 |
| `BYTE` | `unsigned char` | بيانات بايت واحد | 1 |
| `CHAR` | `char` | حرف ANSI | 1 |
| `WCHAR` | `wchar_t` | حرف Unicode | 2 |
| `SHORT` | `short` | عدد صحيح قصير | 2 |
| `WORD` | `unsigned short` | عدد صحيح قصير بدون إشارة | 2 |
| `INT` | `int` | عدد صحيح | 4 |
| `UINT` | `unsigned int` | عدد صحيح بدون إشارة | 4 |
| `LONG` | `long` | عدد صحيح طويل | 4 |
| `ULONG` | `unsigned long` | عدد صحيح طويل بدون إشارة | 4 |
| `DWORD` | `unsigned long` | كلمة مزدوجة (Double Word) | 4 |
| `LONGLONG` | `long long` | عدد صحيح 64-bit | 8 |
| `ULONGLONG` | `unsigned long long` | عدد صحيح 64-bit بدون إشارة | 8 |
| `FLOAT` | `float` | عدد فاصل عائم | 4 |
| `DOUBLE` | `double` | عدد فاصل عائم مزدوج الدقة | 8 |
## 2. أنواع المؤشرات (Pointer Types)
| النوع | الوصف |
|------|-------|
| `PVOID` | مؤشر عام (void*) |
| `PSTR` | مؤشر لسلسلة ANSI (char*) |
| `PWSTR` | مؤشر لسلسلة Unicode (wchar_t*) |
| `LPSTR` | مؤشر طويل لسلسلة ANSI (Long Pointer to String) |
| `LPWSTR` | مؤشر طويل لسلسلة Unicode |
| `LPCSTR` | مؤشر طويل لسلسلة ANSي ثابتة (const char*) |
| `LPCWSTR` | مؤشر طويل لسلسلة Unicode ثابتة (const wchar_t*) |
| `HANDLE` | مؤشر لمقبض (Handle) نظام ويندوز |
| `HWND` | مقبض نافذة (Window Handle) |
| `HDC` | مقبض سياق جهاز (Device Context) |
## 3. أنواع الهياكل (Structure Types)
## 4. أنواع المقابض (Handle Types)
| النوع | الوصف |
|------|-------|
| `HANDLE` | مقبض عام |
| `HWND` | مقبض نافذة |
| `HINSTANCE` | مقبض نسخة تطبيق |
| `HMODULE` | مقبض وحدة (DLL) |
| `HDC` | مقبض سياق جهاز |
| `HBITMAP` | مقبض صورة نقطية |
| `HICON` | مقبض أيقونة |
| `HCURSOR` | مقبض مؤشر |
| `HFONT` | مقبض خط |
| `HBRUSH` | مقبض فرشاة |
| `HPEN` | مقبض قلم |
## 5. أنواع السلاسل النصية (String Types)
| النوع | الترميز | الوصف |
|------|--------|-------|
| `CHAR` | ANSI | حرف واحد (8-bit) |
| `WCHAR` | Unicode | حرف واحد (16-bit) |
| `TCHAR` | متغير | يعتمد على إعدادات المشروع (ANSI/Unicode) |
| `LPSTR` | ANSI | مؤشر لسلسلة ANSI |
| `LPWSTR` | Unicode | مؤشر لسلسلة Unicode |
| `LPTSTR` | متغير | مؤشر لسلسلة TCHAR |
| `LPCSTR` | ANSI | مؤشر لسلسلة ANSي ثابتة |
| `LPCWSTR` | Unicode | مؤشر لسلسلة Unicode ثابتة |
| `LPCTSTR` | متغير | مؤشر لسلسلة TCHAR ثابتة |
## 6. أنواع القيم العائدة (Return Types)
| النوع | الوصف |
|------|-------|
| `LRESULT` | قيمة عائدة من إجراء نافذة |
| `HRESULT` | قيمة عائدة من دالة COM |
| `BOOL` | قيمة منطقية (TRUE/FALSE) |
| `DWORD` | قيمة رقمية 32-bit |
| `VOID` | لا يوجد قيمة عائدة |
## 7. أنواع خاصة بالوظائف
## مثال عملي لاستخدام هذه الأنواع
## نصائح مهمة
1. استخدم `TCHAR` و `_T()` لجعل الكود متوافقًا مع كل من ANSI وUnicode
2. تحقق دائمًا من صحة المقابض (Handles) قبل استخدامها
3. استخدم `DWORD` بدلاً من `unsigned long` لضمان التوافق
4. عند التعامل مع السلاسل النصية، حدد بوضوح ما إذا كنت تستخدم ANSI أم Unicode
هذه الأنواع توفر طبقة تجريد تسمح للكود بالعمل على كل من أنظمة ويندوز 32-bit و64-bit دون مشاكل.
هذا موضوع مهم جداً
# أنواع البيانات الأساسية في دوال نظام ويندوز بلغة C
عند برمجة تطبيقات ويندوز باستخدام لغة C وواجهة WinAPI، ستواجه مجموعة من أنواع البيانات المحددة التي طورتها مايكروسوفت لضمان التوافق بين إصدارات ويندوز المختلفة (32-bit و64-bit). إليك أهم هذه الأنواع:
## 1. الأنواع الأساسية (Basic Types)
| النوع في WinAPI | النوع في C | الوصف | الحجم (بايت) |
|----------------|----------|-------|-------------|
| `BOOL` | `int` | قيمة منطقية (TRUE/FALSE) | 4 |
| `BOOLEAN` | `unsigned char` | قيمة منطقية (مختلفة عن BOOL) | 1 |
| `BYTE` | `unsigned char` | بيانات بايت واحد | 1 |
| `CHAR` | `char` | حرف ANSI | 1 |
| `WCHAR` | `wchar_t` | حرف Unicode | 2 |
| `SHORT` | `short` | عدد صحيح قصير | 2 |
| `WORD` | `unsigned short` | عدد صحيح قصير بدون إشارة | 2 |
| `INT` | `int` | عدد صحيح | 4 |
| `UINT` | `unsigned int` | عدد صحيح بدون إشارة | 4 |
| `LONG` | `long` | عدد صحيح طويل | 4 |
| `ULONG` | `unsigned long` | عدد صحيح طويل بدون إشارة | 4 |
| `DWORD` | `unsigned long` | كلمة مزدوجة (Double Word) | 4 |
| `LONGLONG` | `long long` | عدد صحيح 64-bit | 8 |
| `ULONGLONG` | `unsigned long long` | عدد صحيح 64-bit بدون إشارة | 8 |
| `FLOAT` | `float` | عدد فاصل عائم | 4 |
| `DOUBLE` | `double` | عدد فاصل عائم مزدوج الدقة | 8 |
## 2. أنواع المؤشرات (Pointer Types)
| النوع | الوصف |
|------|-------|
| `PVOID` | مؤشر عام (void*) |
| `PSTR` | مؤشر لسلسلة ANSI (char*) |
| `PWSTR` | مؤشر لسلسلة Unicode (wchar_t*) |
| `LPSTR` | مؤشر طويل لسلسلة ANSI (Long Pointer to String) |
| `LPWSTR` | مؤشر طويل لسلسلة Unicode |
| `LPCSTR` | مؤشر طويل لسلسلة ANSي ثابتة (const char*) |
| `LPCWSTR` | مؤشر طويل لسلسلة Unicode ثابتة (const wchar_t*) |
| `HANDLE` | مؤشر لمقبض (Handle) نظام ويندوز |
| `HWND` | مقبض نافذة (Window Handle) |
| `HDC` | مقبض سياق جهاز (Device Context) |
## 3. أنواع الهياكل (Structure Types)
C:
typedef struct _RECT {
LONG left;
LONG top;
LONG right;
LONG bottom;
} RECT;
typedef struct _POINT {
LONG x;
LONG y;
} POINT;
typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME;
## 4. أنواع المقابض (Handle Types)
| النوع | الوصف |
|------|-------|
| `HANDLE` | مقبض عام |
| `HWND` | مقبض نافذة |
| `HINSTANCE` | مقبض نسخة تطبيق |
| `HMODULE` | مقبض وحدة (DLL) |
| `HDC` | مقبض سياق جهاز |
| `HBITMAP` | مقبض صورة نقطية |
| `HICON` | مقبض أيقونة |
| `HCURSOR` | مقبض مؤشر |
| `HFONT` | مقبض خط |
| `HBRUSH` | مقبض فرشاة |
| `HPEN` | مقبض قلم |
## 5. أنواع السلاسل النصية (String Types)
| النوع | الترميز | الوصف |
|------|--------|-------|
| `CHAR` | ANSI | حرف واحد (8-bit) |
| `WCHAR` | Unicode | حرف واحد (16-bit) |
| `TCHAR` | متغير | يعتمد على إعدادات المشروع (ANSI/Unicode) |
| `LPSTR` | ANSI | مؤشر لسلسلة ANSI |
| `LPWSTR` | Unicode | مؤشر لسلسلة Unicode |
| `LPTSTR` | متغير | مؤشر لسلسلة TCHAR |
| `LPCSTR` | ANSI | مؤشر لسلسلة ANSي ثابتة |
| `LPCWSTR` | Unicode | مؤشر لسلسلة Unicode ثابتة |
| `LPCTSTR` | متغير | مؤشر لسلسلة TCHAR ثابتة |
## 6. أنواع القيم العائدة (Return Types)
| النوع | الوصف |
|------|-------|
| `LRESULT` | قيمة عائدة من إجراء نافذة |
| `HRESULT` | قيمة عائدة من دالة COM |
| `BOOL` | قيمة منطقية (TRUE/FALSE) |
| `DWORD` | قيمة رقمية 32-bit |
| `VOID` | لا يوجد قيمة عائدة |
## 7. أنواع خاصة بالوظائف
C:
typedef INT (WINAPI *FARPROC)(); // مؤشر لدالة API
typedef void (CALLBACK *TIMERPROC)(HWND, UINT, UINT_PTR, DWORD); // مؤشر لدالة رد نداء
## مثال عملي لاستخدام هذه الأنواع
C:
#include <windows.h>
#include <tchar.h>
// دالة تستخدم أنواع WINAPI
BOOL CreateSampleWindow(LPCTSTR lpTitle, INT nWidth, INT nHeight)
{
// تسجيل صنف النافذة
WNDCLASS wc = {0};
wc.lpfnWndProc = DefWindowProc;
wc.hInstance = GetModuleHandle(NULL);
wc.lpszClassName = _T("SampleWindowClass");
if (!RegisterClass(&wc)) {
return FALSE;
}
// إنشاء النافذة
HWND hWnd = CreateWindow(
_T("SampleWindowClass"),
lpTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
nWidth, nHeight,
NULL, NULL, GetModuleHandle(NULL), NULL
);
if (!hWnd) {
return FALSE;
}
ShowWindow(hWnd, SW_SHOW);
UpdateWindow(hWnd);
return TRUE;
}
// دالة تستخدم أنواع البيانات في معالجة الملفات
DWORD ReadFileContent(LPCTSTR szFileName, PBYTE* ppBuffer)
{
HANDLE hFile = CreateFile(
szFileName,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);
if (hFile == INVALID_HANDLE_VALUE) {
return 0;
}
DWORD dwFileSize = GetFileSize(hFile, NULL);
*ppBuffer = (PBYTE)malloc(dwFileSize);
DWORD dwBytesRead;
ReadFile(hFile, *ppBuffer, dwFileSize, &dwBytesRead, NULL);
CloseHandle(hFile);
return dwBytesRead;
}
## نصائح مهمة
1. استخدم `TCHAR` و `_T()` لجعل الكود متوافقًا مع كل من ANSI وUnicode
2. تحقق دائمًا من صحة المقابض (Handles) قبل استخدامها
3. استخدم `DWORD` بدلاً من `unsigned long` لضمان التوافق
4. عند التعامل مع السلاسل النصية، حدد بوضوح ما إذا كنت تستخدم ANSI أم Unicode
هذه الأنواع توفر طبقة تجريد تسمح للكود بالعمل على كل من أنظمة ويندوز 32-bit و64-bit دون مشاكل.