PDA

View Full Version : سوال: نام هدرهای متناظر با DLL های سیستم عامل ویندوز در C++



Slytherin
یک شنبه 04 تیر 1391, 10:08 صبح
سلام دوستان، من به شدت در C++ تازه کار هستم و اگر سؤالم خیلی ابتدایی هست به من ببخشید.
من سعی دارم که از توابع API سیستم عامل ویندوز در برنامه های C++ ام استفاده کنم. برای این کار به عنوان مثال از هدر <windows.h> برای استفاده از user32.dll استفاده می کنم. (تا اینجا مشکلی نیست.)
خوشبختانه منابع بسیاری خوبی برای کار با توابع ویندوز وجود دارد و از اون بابت هم مشکلی ندارم... اینجا تنها با یک مشکل بزرگ رو به رو هستم.
همانطوری که در بالا گفتم مثلا برای استفاده از user32.dll از هدر <windows.h> استفاده می کنیم، حالا برای استفاده از سایر DLL ها باید از چه هدری استفاده کرد؟ مثلا نام هدر متناظر با url.dll و shell32.dll و kernel32.dll و... در c++ چی هست؟ ممنون میشم اگر در مورد نام هدر اغلب dll های کاربردی ویندوز راهنمایی فرمایید و یا اگر دارم جایی اشتباه می کنم گوشزد کنید... باتشکر

mehdi.mousavi
یک شنبه 04 تیر 1391, 22:05 عصر
سلام دوستان، من به شدت در C++ تازه کار هستم و اگر سؤالم خیلی ابتدایی هست به من ببخشید. من سعی دارم که از توابع API سیستم عامل ویندوز در برنامه های C++ ام استفاده کنم. برای این کار به عنوان مثال از هدر <windows.h> برای استفاده از user32.dll استفاده می کنم. (تا اینجا مشکلی نیست.) خوشبختانه منابع بسیاری خوبی برای کار با توابع ویندوز وجود دارد و از اون بابت هم مشکلی ندارم... اینجا تنها با یک مشکل بزرگ رو به رو هستم. همانطوری که در بالا گفتم مثلا برای استفاده از user32.dll از هدر <windows.h> استفاده می کنیم، حالا برای استفاده از سایر DLL ها باید از چه هدری استفاده کرد؟ مثلا نام هدر متناظر با url.dll و shell32.dll و kernel32.dll و... در c++ چی هست؟ ممنون میشم اگر در مورد نام هدر اغلب dll های کاربردی ویندوز راهنمایی فرمایید و یا اگر دارم جایی اشتباه می کنم گوشزد کنید... باتشکر

سلام.
قبل از هر چیز می تونم بپرسم شما از کجا میدونید که User32.dll چه توابعی رو Export کرده که بخواهید از توابع مزبور استفاده کنید؟ بنظر میرسه دارید مسیر رو برعکس میرید... فرض کنید قراره در برنامه، User Profile ای ایجاد کنیم. برای اینکار، آیا شما می دونید چه DLL ای چه تابعی رو برای اینکار پیاده سازی کرده؟ (قطعا خیر!) پس، در MSDN جستجو می کنید که چطور می تونید در Windows، اینکارو انجام بدید و به CreateUserProfile (http://msdn.microsoft.com/en-us/library/windows/desktop/bb762271%28v=vs.85%29.aspx) میرسید. اگر به انتهای صفحه مزبور برید، نیازمندی های فراخوانی این تابع رو تحت عنوان Requirements می بینید: Userenv.lib، Userenv.h و ...

از طرفی، وقتی شما Windows Application ای در VS2010 (یا دیگر نسخه ها) ایجاد می کنید، IDE بطور خودکار Library های زیر رو هنگام Link شدن به Linker میده:


kernel32.lib
user32.lib
gdi32.lib
winspool.lib
comdlg32.lib
advapi32.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
odbc32.lib
odbccp32.lib

همینطور کلیه header های مورد نیاز، با include کردن فایل Windows.h به برنامه اضافه میشه، بنابراین عموما نیازی نیست تا نگران این مساله باشید... در مابقی موارد نیز با جستجویی ساده می تونید به پاسخ برسید. در هر حال، اگر با .NET Framework آشنا باشید، شاید این Resource (http://msdn.microsoft.com/en-us/library/aa302340.aspx) بتونه بهتون کمک کنه تا سریعتر در Win32 پیشرفت کنید (البته این معادل توابع Win32 در .NET هستش، اما خوب، شاید بتونه شما رو در مسیر برعکس نیز یاری کنه).

موفق باشید.

Slytherin
یک شنبه 04 تیر 1391, 22:30 عصر
جناب موسوی ممنون از راهنمایی شما ولی من احساس می کنم که شما منظور من رو بد برداشت کردید (یا شاید درست برداشت کردید و من دارم اشتباه می کنم)

قبل از هر چیز می تونم بپرسم شما از کجا میدونید که User32.dll چه توابعی رو Export کرده که بخواهید از توابع مزبور استفاده کنید؟
منابع زیادی برای آشنایی با dll های ویندوز وجود دارند، من به شخصه از برنامه های Apia و API-Guide برای دونستن و مطالعه در مورد توابع استفاده می کنم به عنوان مثال در برنامه Apia گفته شده:

Private Declare Function SetWindowTextA Lib "user32.dll" (ByVal hwnd As Long, ByVal lpString As String) As Long

و در ادامه گفته:

اين تابع نوشتهء يک پنجره ( منظور از پنجره هر نوع کنترلي است) را تغيير مي دهد
گر تابع کار خود را با موفقيت به پايان برساند مقدار بازگشتي يک عدد غير صفر و اگر تابع با خطايي مواجه شود مقدار بر گشتي صفر خواهد بود

hwnd : هندل پنجره مورد نظر
lpString : نوشته جديدي که بايد جايگزين قبلي شود
حالا من با این توضیحات به راحتی با سرفایل <windows.h> میام و از تابع SetWindowTextA استفاده می کنم...
شما در پاسختون به مایکروسافت ویژوال استدیو و دات نت فریم ورک اشاره کردید و این در حالیه که من از CodeBlocks استفاده می کنم و به هیچ شکلی در حال استفاده از دات نت فریم ورک نیستم، پس مجبورم که به صورت غیر خودکار هدرها رو include کنم...
الان تنها سؤالی که واسم مطرحه اینه که مثلا در هنگام کار با CodeBlocks اگر بخوام از dll هایی که نام بردید استفاده کنم، باید با چه نامی اون هدرها رو اضافه کنم؟
باتشکر از شما بابت پاسختون

#target
دوشنبه 05 تیر 1391, 00:12 صبح
اسم تابع رو در MSDN سرچ کنید نوشته
اون A یا W نیاز نیست
اخر صفحه MSDN نوشته
Header Winuser.h (include Windows.h)

که باید Windows.h رو include کنین