محبوبترینها
نمایش جنگ دینامیت شو در تهران [از بیوگرافی میلاد صالح پور تا خرید بلیط]
9 روش جرم گیری ماشین لباسشویی سامسونگ برای از بین بردن بوی بد
ساندویچ پانل: بهترین گزینه برای ساخت و ساز سریع
خرید بیمه، استعلام و مقایسه انواع بیمه درمان ✅?
پروازهای مشهد به دبی چه زمانی ارزان میشوند؟
تجربه غذاهای فرانسوی در قلب پاریس بهترین رستورانها و کافهها
دلایل زنگ زدن فلزات و روش های جلوگیری از آن
خرید بلیط چارتر هواپیمایی ماهان _ ماهان گشت
سیگنال در ترید چیست؟ بررسی انواع سیگنال در ترید
بهترین هدیه تولد برای متولدین زمستان: هدیههای کاربردی برای روزهای سرد
در خرید پارچه برزنتی به چه نکاتی باید توجه کنیم؟
صفحه اول
آرشیو مطالب
ورود/عضویت
هواشناسی
قیمت طلا سکه و ارز
قیمت خودرو
مطالب در سایت شما
تبادل لینک
ارتباط با ما
مطالب سایت سرگرمی سبک زندگی سینما و تلویزیون فرهنگ و هنر پزشکی و سلامت اجتماع و خانواده تصویری دین و اندیشه ورزش اقتصادی سیاسی حوادث علم و فناوری سایتهای دانلود گوناگون
مطالب سایت سرگرمی سبک زندگی سینما و تلویزیون فرهنگ و هنر پزشکی و سلامت اجتماع و خانواده تصویری دین و اندیشه ورزش اقتصادی سیاسی حوادث علم و فناوری سایتهای دانلود گوناگون
آمار وبسایت
تعداد کل بازدیدها :
1827921248
برنامه نویسی در ویندوز
واضح آرشیو وب فارسی:سایت ریسک: View Full Version : برنامه نویسی در ویندوز amsjavan10-08-2008, 01:25 AMسلا به همه دوستان عزیز من تقریبا c++ رو یاد گرفتم و تازه برنامه نویسی در ویندوز رو شروع کردم. در واقع دارم با API های ویندوز آشنا می شم. طبیعتا در این راه با سوالات زیادی مواجه می شم. می خواستم از شما دوستان عزیز کمک بگیرم تا به جواب سوالاتم برسم. ممنون می شم اگه جواب بدید amsjavan10-08-2008, 01:41 AMHinstance با Hwnd چه فرقی داره؟ هر دوشون رو تو Msdn نوشته نوع Handle هستند. Ho$∑∫N10-08-2008, 10:13 AMبهتر نیست به این راهنمای بسیار جامع مراجعه کنی؟ : msdn amsjavan10-08-2008, 10:26 AMپست اولم رو به دلیل واضح بودن سوال ویرایش کردم. سوال بعدیم اینه که CALLBACK چه معنایی داره. تو MSDN نوشته define هست به _stdcall اما بیشتر توضیح نداده. این _stdcall چیه؟ hoax3r10-08-2008, 10:35 AMDWORD برای تعریف مقادیر عددی 32 بیتی استفاده میشه و در MSDN به این شکل تعریف شده !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! LPSTR که مخفف long point string هست یه اشاره گر به آدرس یک رشته هست و در به این شکل تعریف شده !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! HINSTANCE یه هندل برای برنامه هست و در به این شکل تعریف شده !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! و موارد استفادشون رو هم بهتره از خود MSDN پیدا کرد. شاد باشید amsjavan10-08-2008, 03:29 PMخیلی ممنون از توضیحاتتون. من تو Msdn دیدم که Hbrush به این شکل تعریف شده: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!!-حالا می تونم هر جای برنامه به جای HBRUSH، بنویسم HANDLE ؟ یه جایی این کار رو کردم اشکال گرفت - یه کلاس ویندوز تعریف کردم و فیلد های اونو که پر کردم تو قسمت hbrBackground اشکال گرفت گفت نمیتونه void * یه HBRUSH * تبدیل کنه در صورتی که جایی که من دیدم بدون تبدیل نوشته بود: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!!!!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!!یعنی در واقع باید تابع GetStockObject رو به این صورت بنویسم: (HBRUSH)GetStockObject(BLACK_BRUSH) من این رو از رو کتاب خوندم. یعنی اشتباه نوشته بود؟ یا مشکل از جای دیگست؟ hoax3r10-08-2008, 05:09 PMسعی کنید تا حد ممکن مطالبی که از کتابهای دیگه میخونین با مطالب MSDN هم مطابقت بدین وقتی میخوایم برای ویندوز برنامه بنویسیم باید یکسری قواعد و قوانینی که توسط ماکروسافت عرضه شده رو هم رعایت کنیم یعنی جایی که لازمه از HBRUSH استفاده بشه همینو استفاده کنیم و جایی که HANDLE باید استفاده ما هم از هندل استفاده کنیم پس در درجه اول مرجع اصلی ما MSDN باید باشه نه چیز دیگه، اینجوری موقع کامپایل، کامپایلر هم میدونه با چه داده ای سرو کار داره و تا حد ممکن ایرادات هم رفع میشه در مورد GetStockObject هم همونطور که خودتون گفتین درسته (HBRUSH) رو قبلش قرار بدین شاد باشید hoax3r10-08-2008, 05:37 PMپست اولم رو به دلیل واضح بودن سوال ویرایش کردم. سوال بعدیم اینه که CALLBACK چه معنایی داره. تو MSDN نوشته define هست به _stdcall اما بیشتر توضیح نداده. این _stdcall چیه؟ تو ویندوز چند نوع فراخانی تابع داریم که هر کدوم خصوصیات خاصی دارن، از نظر فرستان آرگومان به تابع، پاک کردن stack و ... مانند اینا: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! API های ویندوز از stdcall__ برای فراخانی استفاده میکنه، و این خصوصیاتشه : 1- آرگومانها از راست به چپ به تابع فرستاده میشه 2- تابع وظیفه پاک کردن stack رو داره 3- ابتدای تابع "_" قرار میگیره بعد علامت "@" و بعد مقدار بایتی که تو stack لازم داره این لینک توضیحات بیشتری داره بد نیست ببینید: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! شاد باشید amsjavan12-08-2008, 09:32 PMخیلی ممنون از توضیحات خوبتون می خواستم یه cursor که خودم درست کردم برای پنجره بزارم اما هر کاری می کنم نمیشه یعنی وقتی موس رو می برم رو صفحه هیچی نشون نمیده و موس غیب میشه. resource file هم درست کردم. مشکل از کجاست؟ !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! hoax3r13-08-2008, 12:05 AMاین خط رو !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! به این تغییر بدین !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! البته بد نیست مثالی که تو این سایت هم هست نگاه کنید کمکتون میکنه: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! شاد باشید amsjavan13-08-2008, 12:10 AMاین خط رو !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!!به این تغییر بدین !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! error میده. دلیلش هم به خاطر اینه که من تو فایل rc به صورت رشته icon رو تعریف کردن نه عدد ثابت. نمی تونم بفهمم مشکل از کجاست! amsjavan13-08-2008, 12:33 AMhoax3r عزیز خیلی ممنون مشکل از نوع cursor ی بود که درست کردم. حل شد. hoax3r13-08-2008, 01:11 AMخوب خوشحالم مشکلتون حل شد، به جواب رسیدین زودتر از من پست دادین :31:، پستمو ویراش کردم شاد باشید amsjavan15-08-2008, 12:06 PMیه منو درست کردم و می خوام هر وقت exit رو زدم خارج بشه. این کد رو تو قسمت winproc() نوشتم: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! حالا سوالم اینه که چرا باید پارامتر wparam رو با استفاده از LOWORD به نوع WORD تبدیل کنیم. ماکروی LOWORD مثل تابع عمل میکنه؟ hoax3r15-08-2008, 03:22 PMیه منو درست کردم و می خوام هر وقت exit رو زدم خارج بشه. این کد رو تو قسمت winproc() نوشتم: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! حالا سوالم اینه که چرا باید پارامتر wparam رو با استفاده از LOWORD به نوع WORD تبدیل کنیم. ماکروی LOWORD مثل تابع عمل میکنه؟ وقتی پیام WM_COMMAND صدا زده میشه، برایه اینکه بفهمیم کاربر چه کنترلی یا منویی رو زده باید مقدار wParam این پیام رو برسی کنیم. مقدار wParam یک مقدار DWORD هست یا دو تا WORD این دو تا WORD یکی رو با ارزش یکی رو هم کم ارزش میگن. قسمت کم ارزش شناسه اون کنترل یا منو هست مثل MENU_FILE_ID_EXIT و بخش با ارزش رخدادی (notification) که اتفاق افتاده رو مشخص میکنه مثل کلیک کردن و ... ماکرو های LOWORD و HIWORD هم این مقادیر کم ارزش و با ارزش رو از یک مقدار dword میگیرن این دو تا ماکرو به این صورت تو فایل windef.h تعریف شدن !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! موقعی که کامپایلر تو کد به یه ماکرو برسه اونو رو با عبارتی که براش تعریف شده جایگزین میکنه شاد باشید amsjavan18-08-2008, 01:02 PMوقتی پیام WM_COMMAND صدا زده میشه، برایه اینکه بفهمیم کاربر چه کنترلی یا منویی رو زده باید مقدار wParam این پیام رو برسی کنیم. مقدار wParam یک مقدار DWORD هست یا دو تا WORD این دو تا WORD یکی رو با ارزش یکی رو هم کم ارزش میگن. قسمت کم ارزش شناسه اون کنترل یا منو هست مثل MENU_FILE_ID_EXIT و بخش با ارزش رخدادی (notification) که اتفاق افتاده رو مشخص میکنه مثل کلیک کردن و ... ماکرو های LOWORD و HIWORD هم این مقادیر کم ارزش و با ارزش رو از یک مقدار dword میگیرن این دو تا ماکرو به این صورت تو فایل windef.h تعریف شدن !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!!موقعی که کامپایلر تو کد به یه ماکرو برسه اونو رو با عبارتی که براش تعریف شده جایگزین میکنه شاد باشید خیلی ممنون از توضیحات بسیار خوبتون. تو تعریفش نوشته که فقط DWORD رو به WORD تبدیل می کنه. حالا از کجا می فهمه که کدوم با ارزشه و کدو کم ارزش؟ با این تعریف فقط یکی شو می شه فهمید. منظورم اینه که توی یک متغیر چه جوری دو حالت ذخیره می شه؟ hoax3r18-08-2008, 09:21 PMخوب برای فهمیدن این موضوع بهتر اینجور بگیم، یه مقدار DWORD رو اگر بصورت یک عدد هگزادسیمال بخوایم نشون بدیم نهایتش عدد FFFFFFFF هست هشتا F به این صورت که چهار رقم سمت چپ که یه مقدار WORD هست رو با ارزش و چهار رقم سمت راست رو کم ارزش میگن حالا که موقعیت کلمه کم ارزش و با ارزش رو میدونیم می تونیم با یکسری از دستورات این دو رو تفکیک کنیم !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! اگه به تعریف ماکرو ها دقت کنیم، برای کلمه کم ارزش این مقدار تعریف شده !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! این چی میگه؟ یه مقدار DWORD (همون L کوچیک که داخل پرانتز) هست رو با مقدار ffff که یک مقدار هگز هست عمل AND رو روش انجام بده ( این عمل با & مشخص شده) برای مثال عدد 1234ABCD رو اگه با FFFF این عمل رو انجام بده نتیجه !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! نتیجه کلمه کم ارزش میشه و برای کلمه با ارزش این ماکرو هست !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! اینجا مقدرا DWORD به اندازه 16 بیت (یا 4 بایت) به سمت راست اصطلاحا شیفت یا جابجا میشه پس برای مثال قبل اینجور میشه !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! اینجوری این دوتا از هم جدا میشن، اگه با دو تا عملوند & و << بیشتر آشنا بشین خیلی کمکتون میکنه شاد باشید reza 15200619-08-2008, 08:34 AMسلام شرمنده که این سوال رو اینجا مطرح می کنم ولی خیلی عجلادارم می خام یه لپ تاپ بخرم برای برنامه نویسی (از برنامه های سطح متوسط مثل c/ c++/java تابرنامه های سطح بالا). می خواستم بدونم تمام برنامه ها هموشون در محیط xp-vista بدون مشکلی ایجاد میشوند ومشکلی درحین نوشتن برنامه پیش نمی یاد یاباید حتما لپ تاپی راانتخاب کنم که بتونه linux-dos-98 رو ساپورت کنه؟ پیشاپیش متشکرم. amsjavan19-08-2008, 10:05 AMhoax3r عزیز خیلی خیلی ممنون. خیلی قشنگ و جامع توضیح دادید. حیفم اومد فقط دکمه تشکر رو بزنم. amsjavan23-08-2008, 01:19 PMباز هم سوال:13: یه برنامه نوشتم که باید عرض مستطیل رو زیاد کنه و زیاد شدنش رو به صورت انیمیشن تو صفحه نشون بده. این کد قسمت حلقه اصلی برنامه است: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! حالا سوالم اینه که چرا وقتی تو این قسمت می نویسم اول پردازش رو کامل انجام می ده بعد رسم می کنه. در صورتی که می خواستم همزمان با پردازش رسم هم انجام بشه. مگه این قسمت یه حلقه بلادرنگ نیست؟ hoax3r24-08-2008, 02:54 PMسلام خوب بخاطر اینکه سرعت پردازش پیامها بالاست ما این روند رو به راحتی نمیبینیم برای حل مشکل میتونیم با تابع Sleep یه وقفه ایجاد کنیم برای تغییر ضلع پایین (bottom) مستطیل در تابع Rectangle باید پارامتر آخر تغییر پیدا کنه، !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! شاد باشید amsjavan24-08-2008, 06:57 PMخیلی ممنون حالا چرا وقتی تو دستوراتif ( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE) ) مثلا می خوام که یک شکل رو بکشه. درست عمل می کنه. منظورم اینه که سیستم همیشه پیام می ده و دائم وارد این شرط می شه؟ اگه اینطور نباشه شکل باید خاموش روشن بشه و به طور پیوسته نشون داده نشه که این اتفاق نمی افته! hoax3r25-08-2008, 10:30 AMهر پیامی که به برنامه فرستاده بشه تو یک صف قرار می گیره بعد تابع PeekMessage اگه پیامی باشه اونو در یافت میکنه برای همین هیچ پیامی از بین نمی ره برنامه هم کارشو انجام میده. amsjavan25-08-2008, 10:44 AMهر پیامی که به برنامه فرستاده بشه تو یک صف قرار می گیره بعد تابع PeekMessage اگه پیامی باشه اونو در یافت میکنه برای همین هیچ پیامی از بین نمی ره برنامه هم کارشو انجام میده. منظورم این نبود. سوالم اینه که آیا همیشه windows در حال پیام فرستانه که دائم وارد شرط if میشه؟ hoax3r25-08-2008, 11:41 AMمنظورم این نبود. سوالم اینه که آیا همیشه windows در حال پیام فرستانه که دائم وارد شرط if میشه؟ راستش در این مورد زیاد مطمعن نیستم که به چه صورته، ولی فکر میکنم تا زمانی که یه رخدادی حالا یا از طرف کاربر یا از دیگر برنامه مرتبط با برنامه ما نباشه پیامی صادر نشه، البته بازم میگم در این مورد زیاد اطلاع ندارم bahareh65507-09-2008, 01:02 AMسلام من پروژه ام،هسته اصلی اش برنامه نویسی ویندوزه! ولی اصلا تجربه ای در این زمینه ندارم! برای شروع پروژه باید یه dll نمونه بنویسم و بعد اون رو از طریق یه برنامه ی دیگه صدا بزنم،می خواستم اگه کسی تجربه نوشتن یه dll رو داره،لطف کنه کمکم کنه! پیشاپیش ازتون ممنونم mic_makarti07-09-2008, 05:16 PMسلام . درباره دی ال ال : http://msdn.microsoft.com/en-us/library/ms682589(VS.85).aspx amsjavan08-09-2008, 11:59 PMاین کد رو نو visual c++ 2005 نوشتم: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! نمی دونم چرا این error رو میده: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! وقتی هم که به LPCWSTR تبدیل می کنم عنوان پنجره رو به یه زبون دیگه می نویسه! توی visual c++ 6 هم error link میده و اجرا نمیشه! hoax3r09-09-2008, 10:35 AMسلام اررور اولی بخاطر اینه که شما یه رشته رو مستقیم تو متغیر ریختی در این خط !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! باید از قبل این رشته ای ای به عنوان کلاس هست رو تعریف کنی بعد به lpszClassName اختصاص بدی. !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! اررور بعددی به این دلیله که این کامپایلر بطور پیشفرض تمام رشته ها رو یونیکد فرض میکنه، که برای حلش دو تا کار میشه کرد 1 - تو تنظیمات کامپایلر نوع رشته رو تغییر بدیم به اینصورت اول وارد منوی Project->Project Name Properties بشین(Project Name اسم پروژت هست) بعد قسمت Character Set رو به Use Multi-Byte Character Set تغییر بدی 2- راه دوم اینه که شما تمام رشته ها داخل کد رو مشخص کنید یونیکد هست به اینصورت که اول هر رشته حرف L رو قرار بدین !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! amsjavan09-09-2008, 06:04 PMخیلی ممنون که جواب دادین اررور اولی بخاطر اینه که شما یه رشته رو مستقیم تو متغیر ریختی در این خط !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!!باید از قبل این رشته ای ای به عنوان کلاس هست رو تعریف کنی بعد به lpszClassName اختصاص بدی. !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!!این کار رو کردم باز هم error داد: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! درست نفهمیدم چرا این کاری که شما گفتید رو باید انجام داد! من قبلا این اسم رو به عنوان ثابت تعریف می کردم و بعد به lpszClassName نسبت می دادم. تو تعریف ثابت اصلا از LPSTR استفاده نمی کردم! LPSTR مگه همون * char نیست؟ amsjavan09-09-2008, 06:24 PMجلوی اون خط هم یه L گذاشتم درست شد: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! این L دقیقا چی کار می کنه؟ hoax3r09-09-2008, 07:47 PMخیلی ممنون که جواب دادین این کار رو کردم باز هم error داد: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! درست نفهمیدم چرا این کاری که شما گفتید رو باید انجام داد! من قبلا این اسم رو به عنوان ثابت تعریف می کردم و بعد به lpszClassName نسبت می دادم. تو تعریف ثابت اصلا از LPSTR استفاده نمی کردم! LPSTR مگه همون * char نیست؟ ایکارو باید بعد اینکه اون تنظیماتی که در مورد Character Set گفتم انجام بدین. در غیر اینصورت L رو به رشته اضافه میکنید LPSTR و * char همونطور که گفتین یکی هستن. حالا چرا من به این شکل استفاده کردم بیشتر بر حسب عادت بوده دلیل خاصی نداره. جلوی اون خط هم یه L گذاشتم درست شد: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! این L دقیقا چی کار می کنه؟ بله حق با شماست. در این حالت چون lpszClassName به صورت LPCSTR تعریف شده میشه مستقیم رشته رو وارد کرد L هم نشون میده رشته از نوع یونیکد هست. amsjavan10-09-2008, 12:28 AMمنظورم این نبود که چرا به جای * char، از LPCSTR استفاده می کنید! من قبلا تو visual c++ 6 یه اسمی رو define می کردم: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!!بعد WinClassName رو به lpszClassName نسبت می دادم: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!!یعنی اینجا به LPCSTR تبدیل نمی کردم! hoax3r10-09-2008, 11:15 AMمنظورم این نبود که چرا به جای * char، از LPCSTR استفاده می کنید! من قبلا تو visual c++ 6 یه اسمی رو define می کردم: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!!بعد WinClassName رو به lpszClassName نسبت می دادم: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!!یعنی اینجا به LPCSTR تبدیل نمی کردم! درست منظورتون رو از جمله آخر که گفتین "یعنی اینجا به LPCSTR تبدیل نمی کردم!" رو متوجه نشدم. چی رو تبدیل میکردین؟ مهم اینه که lpszClassName به صورت LPCSTR تعریف شده و شما میتونید رشته رو داخل کد به صورت مستقیم هم اختصاص بدین حالا فرقی نداره رشته قبلا به چه شکل تعریف شده باشه. amsjavan10-09-2008, 12:30 PMخیلی ممنون. یه چیزی رو قاطی کرده بودم الان فهمیدم. bahareh65524-09-2008, 12:08 AMسلام دوستان من تازه برنامه نویسی ویندوز با C++ رو شروع کردم! اولشم می خوام با نوشتن یه dll نوع win32 ساده و بعد نوشتن یه Application که تابع نوشته شده تو dll رو صدا می زنه،شروع کنم! یه نمونه کد هم پیدا کردم که یه dll ساده اس به اضافه کدهایی که اتصال پویای load-time و run-time رو پیاده سازی کردن و چند کاربرد دیگه! اون نمونه کدها رو هم تو یه فایل notpad اینجا آپ کردم: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! من برای dll یه workspace تو محیط win32 cosole application ایجاد کردم و کدشو اونجا کپی کردم،می خواستم بدونم برای توابع load-time یا run-time باید یه workspace جدید ایجاد کنم یا تو همون workspace مربوط به dll باید باشن! اگه ممکنه طریقه build کردن این کدها رو واسم توضیح بدین،چون من اصلاً تجربه ای در زمینه نوشتن کد dll و اجرای اون ندارم! در ضمن تا حالا شده که یه نمونه کد csp رو کامپایل و اجرا کنین؟ سه تا سوال کوچیک هم داشتم، لطفاً توضیحی در مورد،LPTSTR ،Instance و Handle بدین؟! و نهایتاً اینکه آیا تو کتابخونه ی msdn در مورد syntax و دستورات زبان ویندوزی تو C++ توضیحی داده شده؟ با کمال تشکر:20: hoax3r24-09-2008, 03:30 PMبرای ساخت dll در کامپایلر ++VC نسخه 2005 اول یه پروژه win32 Project یا win32 console application رو انتخاب میکنید تو صفحه ظاهر شده گزینه DLL رو بزنید که مشخص بشه پروزه از نوع dll هست. به عنوان مثال فایهای dll.cpp و dll.h رو ایجاد کنید به این صورت. بعدم کامپایل کنید تا dll درست بشه dll.h !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! dll.cpp !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! ما یه تابع ShowMsg ایجاد کردیم که یه پیام نشون بده، حالا برای استفاده میتوینم از توابع LoadLibrary و GetProcAddress استفاده کنیم یا به این صورت راحتتر به این صورت در میاد !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! اون سه سوال هم تو MSDN توضیحای داده، ولی بصورت خلاصه اینجوری میشه گفت HANDLE : برای کار با اشیاء مثلها فایهال و پروسه ها و ... احتیاج به جور حق دسترسی یا حالا هر چی بشه اسمشو گزاشت هست که بهش هندل میگن LPTSTR : قسمت LP همون اشاره گر هست، T وقتی پروژه رو بخوان هم بصورت اسکی و یونیکد بدن از این استفاده میکنن و STR هم که معلومه رشتس که اگه T رو در نظر نگیریم معادل این میشه !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! در مورد سوال آخر مثالهایی که MSDN داره بیشتر ترکیب C و win32 api هست. ولی اگه ترکیب api ها با کلاسهای ++C رو بخواین این سایت رو بد نیست ببینید. !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! در مورد csp هم اطلاعی ندارم شاد باشید bahareh65501-10-2008, 06:06 PMسلام ضمن عرض تشکر بابت جواب کامل به سوالاتم:20: به چند تا مشکل برخوردم که اگه بازم لطف کنید و پاسخ بدید،ازتون ممنون میشم! برای ساخت dll در کامپایلر ++VC نسخه 2005 اول یه پروژه win32 Project یا win32 console application رو انتخاب میکنید تو صفحه ظاهر شده گزینه DLL رو بزنید که مشخص بشه پروژه از نوع dll هست. راستش من از Visual C++ 6 استفاده می کنم! بعد از انتخاب win32 console application ،تو صفحه بعد گزینه ای مبنی بر انتخاب dll وجود نداره،شکل های زیر: http://i36.tinypic.com/1qipz8.jpg http://i36.tinypic.com/2i9niw8.jpg به عنوان مثال فایهای dll.cpp و dll.h رو ایجاد کنید به این صورت. بعدم کامپایلکنید تا dll درست بشه اگه منظورتون این بوده که اول یه فایل با نام dll.cpp از نوع C++ Source File مثل شکل پایین ایجاد کنم و دوباره یه صفحه جدید از این نوع،این بار با اسم dll.h ایجاد کنم و کدهای مربوطه رو تو صفحات کپی کنم و بعد کدها رو Build کنم،این کارا رو کردم،ولی فایل dll ساخته نشد تا اونو تو دایرکتوری system ویندوز کپی کنم و بعد با یه کد دیگه اونو فراخونی کنم و فقط فایل .lib ایجاد شد! http://i34.tinypic.com/5v2aoi.jpg در ضمن موقع کامپایل کردن هم با این لینک ارورها مواجه شدم: کد: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! میشه در مورد این دو تا خطا توضیح بدین که علت بوجود اومدنشون چیه؟ !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! وقتی که کد بالا رو هم تو یه صفحه دیگه کپی و اجرا می کنم،میگه: "dll.lib " رو نمی تونه باز کنه! من حتی واسه این کد یه workspace جدیدم ایجاد کردم و بعد از اجرا،دوباره می گفت نمی تونه "dll.lib " رو باز کنه! اگه ممکنه در مورد اینکه : اصلاً این کد چه توی یه صفحه جدید از همون workspace و چه توی یه workspace جدید ایجاد بشه، چه طوری(طی چه عملیاتی) می تونه فایل "dll.lib " رو پیدا کنه،توضیح بدین! در مورد HANDLE : برای کار با اشیاء مثلها فایهال و پروسه ها و ... احتیاج به جور حق دسترسییا حالا هر چی بشه اسمشو گزاشت هست که بهش هندل میگن LPTSTR : قسمت LP هموناشاره گر هست، T وقتی پروژه رو بخوان هم بصورت اسکی و یونیکد بدن از این استفادهمیکنن و STR هم که معلومه رشتس که اگه T رو در نظر نگیریم معادل این میشه توضیحاتتون در مورد این دو تا خیلی کامل بود،فقط می خواستم بدونم که instance یه شی ای از هر نوع داده می تونه باشه یا خودش یه DataType هستش؟ در مورد سوال آخر مثالهایی که MSDN داره بیشتر ترکیب C و win32 api هست. ولی اگه ترکیب api ها با کلاسهای ++C رو بخواین این سایت رو بد نیست ببینید. !!!! برای مشاه سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 1137]
-
گوناگون
پربازدیدترینها