مشاهده نسخه کامل
: برنامه نویسی در ویندوز
amsjavan
10-08-2008, 00:25
سلا به همه دوستان عزیز
من تقریبا c++ رو یاد گرفتم و تازه برنامه نویسی در ویندوز رو شروع کردم. در واقع دارم با API های ویندوز آشنا می شم. طبیعتا در این راه با سوالات زیادی مواجه می شم. می خواستم از شما دوستان عزیز کمک بگیرم تا به جواب سوالاتم برسم.
ممنون می شم اگه جواب بدید
amsjavan
10-08-2008, 00:41
Hinstance با Hwnd چه فرقی داره؟ هر دوشون رو تو Msdn نوشته نوع Handle هستند.
بهتر نیست به این راهنمای بسیار جامع مراجعه کنی؟ :
msdn
amsjavan
10-08-2008, 09:26
پست اولم رو به دلیل واضح بودن سوال ویرایش کردم.
سوال بعدیم اینه که CALLBACK چه معنایی داره. تو MSDN نوشته define هست به _stdcall اما بیشتر توضیح نداده. این _stdcall چیه؟
DWORD برای تعریف مقادیر عددی 32 بیتی استفاده میشه و در MSDN به این شکل تعریف شده
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
LPSTR که مخفف long point string هست یه اشاره گر به آدرس یک رشته هست و در به این شکل تعریف شده
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
HINSTANCE یه هندل برای برنامه هست و در به این شکل تعریف شده
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و موارد استفادشون رو هم بهتره از خود MSDN پیدا کرد.
شاد باشید
amsjavan
10-08-2008, 14:29
خیلی ممنون از توضیحاتتون.
من تو Msdn دیدم که Hbrush به این شکل تعریف شده:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید-حالا می تونم هر جای برنامه به جای HBRUSH، بنویسم HANDLE ؟ یه جایی این کار رو کردم اشکال گرفت
- یه کلاس ویندوز تعریف کردم و فیلد های اونو که پر کردم تو قسمت hbrBackground اشکال گرفت گفت نمیتونه void * یه HBRUSH * تبدیل کنه در صورتی که جایی که من دیدم بدون تبدیل نوشته بود:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدیعنی در واقع باید تابع GetStockObject رو به این صورت بنویسم: (HBRUSH)GetStockObject(BLACK_BRUSH)
من این رو از رو کتاب خوندم. یعنی اشتباه نوشته بود؟ یا مشکل از جای دیگست؟
سعی کنید تا حد ممکن مطالبی که از کتابهای دیگه میخونین با مطالب MSDN هم مطابقت بدین
وقتی میخوایم برای ویندوز برنامه بنویسیم باید یکسری قواعد و قوانینی که توسط ماکروسافت عرضه شده رو هم رعایت کنیم
یعنی جایی که لازمه از HBRUSH استفاده بشه همینو استفاده کنیم و جایی که HANDLE باید استفاده ما هم از هندل استفاده کنیم
پس در درجه اول مرجع اصلی ما MSDN باید باشه نه چیز دیگه،
اینجوری موقع کامپایل، کامپایلر هم میدونه با چه داده ای سرو کار داره و تا حد ممکن ایرادات هم رفع میشه
در مورد GetStockObject هم همونطور که خودتون گفتین درسته (HBRUSH) رو قبلش قرار بدین
شاد باشید
پست اولم رو به دلیل واضح بودن سوال ویرایش کردم.
سوال بعدیم اینه که CALLBACK چه معنایی داره. تو MSDN نوشته define هست به _stdcall اما بیشتر توضیح نداده. این _stdcall چیه؟
تو ویندوز چند نوع فراخانی تابع داریم که هر کدوم خصوصیات خاصی دارن، از نظر فرستان آرگومان به تابع، پاک کردن
stack و ...
مانند اینا:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
API های ویندوز از stdcall__ برای فراخانی استفاده میکنه، و این خصوصیاتشه :
1- آرگومانها از راست به چپ به تابع فرستاده میشه
2- تابع وظیفه پاک کردن stack رو داره
3- ابتدای تابع "_" قرار میگیره بعد علامت "@" و بعد مقدار بایتی که تو stack لازم داره
این لینک توضیحات بیشتری داره بد نیست ببینید:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
شاد باشید
amsjavan
12-08-2008, 20:32
خیلی ممنون از توضیحات خوبتون
می خواستم یه cursor که خودم درست کردم برای پنجره بزارم اما هر کاری می کنم نمیشه یعنی وقتی موس رو می برم رو صفحه هیچی نشون نمیده و موس غیب میشه. resource file هم درست کردم. مشکل از کجاست؟
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این خط رو
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
به این تغییر بدین
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
البته بد نیست مثالی که تو این سایت هم هست نگاه کنید کمکتون میکنه:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
شاد باشید
amsjavan
12-08-2008, 23:10
این خط رو
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدبه این تغییر بدین
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
error میده. دلیلش هم به خاطر اینه که من تو فایل rc به صورت رشته icon رو تعریف کردن نه عدد ثابت. نمی تونم بفهمم مشکل از کجاست!
amsjavan
12-08-2008, 23:33
hoax3r عزیز خیلی ممنون مشکل از نوع cursor ی بود که درست کردم. حل شد.
خوب خوشحالم مشکلتون حل شد، به جواب رسیدین زودتر از من پست دادین :31:، پستمو ویراش کردم
شاد باشید
amsjavan
15-08-2008, 11:06
یه منو درست کردم و می خوام هر وقت exit رو زدم خارج بشه. این کد رو تو قسمت winproc() نوشتم:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حالا سوالم اینه که چرا باید پارامتر wparam رو با استفاده از LOWORD به نوع WORD تبدیل کنیم.
ماکروی LOWORD مثل تابع عمل میکنه؟
یه منو درست کردم و می خوام هر وقت exit رو زدم خارج بشه. این کد رو تو قسمت winproc() نوشتم:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حالا سوالم اینه که چرا باید پارامتر wparam رو با استفاده از LOWORD به نوع WORD تبدیل کنیم.
ماکروی LOWORD مثل تابع عمل میکنه؟
وقتی پیام WM_COMMAND صدا زده میشه، برایه اینکه بفهمیم کاربر چه کنترلی یا منویی رو زده باید مقدار
wParam این پیام رو برسی کنیم. مقدار wParam یک مقدار DWORD هست یا دو تا WORD
این دو تا WORD یکی رو با ارزش یکی رو هم کم ارزش میگن.
قسمت کم ارزش شناسه اون کنترل یا منو هست مثل MENU_FILE_ID_EXIT و
بخش با ارزش رخدادی (notification) که اتفاق افتاده رو مشخص میکنه مثل کلیک کردن و ...
ماکرو های LOWORD و HIWORD هم این مقادیر کم ارزش و با ارزش رو از یک مقدار dword میگیرن
این دو تا ماکرو به این صورت تو فایل windef.h تعریف شدن
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
موقعی که کامپایلر تو کد به یه ماکرو برسه اونو رو با عبارتی که براش تعریف شده جایگزین میکنه
شاد باشید
amsjavan
18-08-2008, 12:02
وقتی پیام WM_COMMAND صدا زده میشه، برایه اینکه بفهمیم کاربر چه کنترلی یا منویی رو زده باید مقدار
wParam این پیام رو برسی کنیم. مقدار wParam یک مقدار DWORD هست یا دو تا WORD
این دو تا WORD یکی رو با ارزش یکی رو هم کم ارزش میگن.
قسمت کم ارزش شناسه اون کنترل یا منو هست مثل MENU_FILE_ID_EXIT و
بخش با ارزش رخدادی (notification) که اتفاق افتاده رو مشخص میکنه مثل کلیک کردن و ...
ماکرو های LOWORD و HIWORD هم این مقادیر کم ارزش و با ارزش رو از یک مقدار dword میگیرن
این دو تا ماکرو به این صورت تو فایل windef.h تعریف شدن
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدموقعی که کامپایلر تو کد به یه ماکرو برسه اونو رو با عبارتی که براش تعریف شده جایگزین میکنه
شاد باشید
خیلی ممنون از توضیحات بسیار خوبتون.
تو تعریفش نوشته که فقط DWORD رو به WORD تبدیل می کنه. حالا از کجا می فهمه که کدوم با ارزشه و کدو کم ارزش؟ با این تعریف فقط یکی شو می شه فهمید. منظورم اینه که توی یک متغیر چه جوری دو حالت ذخیره می شه؟
خوب برای فهمیدن این موضوع بهتر اینجور بگیم، یه مقدار DWORD رو اگر بصورت یک عدد هگزادسیمال بخوایم نشون بدیم
نهایتش عدد FFFFFFFF هست هشتا F به این صورت که چهار رقم سمت چپ که یه مقدار WORD هست رو با ارزش و چهار رقم سمت راست رو کم ارزش میگن
حالا که موقعیت کلمه کم ارزش و با ارزش رو میدونیم می تونیم با یکسری از دستورات این دو رو تفکیک کنیم
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اگه به تعریف ماکرو ها دقت کنیم، برای کلمه کم ارزش این مقدار تعریف شده
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این چی میگه؟ یه مقدار DWORD (همون L کوچیک که داخل پرانتز) هست رو با مقدار ffff که یک مقدار هگز هست عمل AND رو روش انجام بده ( این عمل با & مشخص شده)
برای مثال عدد 1234ABCD رو اگه با FFFF این عمل رو انجام بده نتیجه
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
نتیجه کلمه کم ارزش میشه
و برای کلمه با ارزش این ماکرو هست
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اینجا مقدرا DWORD به اندازه 16 بیت (یا 4 بایت) به سمت راست اصطلاحا شیفت یا جابجا میشه
پس برای مثال قبل اینجور میشه
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اینجوری این دوتا از هم جدا میشن، اگه با دو تا عملوند & و << بیشتر آشنا بشین خیلی کمکتون میکنه
شاد باشید
reza152006
19-08-2008, 07:34
سلام شرمنده که این سوال رو اینجا مطرح می کنم ولی خیلی عجلادارم می خام یه لپ تاپ بخرم برای برنامه نویسی (از برنامه های سطح متوسط مثل c/ c++/java تابرنامه های سطح بالا).
می خواستم بدونم تمام برنامه ها هموشون در محیط xp-vista بدون مشکلی ایجاد میشوند ومشکلی درحین نوشتن برنامه
پیش نمی یاد یاباید حتما لپ تاپی راانتخاب کنم که بتونه linux-dos-98 رو ساپورت کنه؟
پیشاپیش متشکرم.
amsjavan
19-08-2008, 09:05
hoax3r عزیز خیلی خیلی ممنون. خیلی قشنگ و جامع توضیح دادید. حیفم اومد فقط دکمه تشکر رو بزنم.
amsjavan
23-08-2008, 12:19
باز هم سوال:13:
یه برنامه نوشتم که باید عرض مستطیل رو زیاد کنه و زیاد شدنش رو به صورت انیمیشن تو صفحه نشون بده.
این کد قسمت حلقه اصلی برنامه است:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حالا سوالم اینه که چرا وقتی تو این قسمت می نویسم اول پردازش رو کامل انجام می ده بعد رسم می کنه. در صورتی که می خواستم همزمان با پردازش رسم هم انجام بشه. مگه این قسمت یه حلقه بلادرنگ نیست؟
سلام
خوب بخاطر اینکه سرعت پردازش پیامها بالاست ما این روند رو به راحتی نمیبینیم برای حل مشکل میتونیم با تابع Sleep یه وقفه ایجاد کنیم
برای تغییر ضلع پایین (bottom) مستطیل در تابع Rectangle باید پارامتر آخر تغییر پیدا کنه،
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
شاد باشید
amsjavan
24-08-2008, 17:57
خیلی ممنون
حالا چرا وقتی تو دستوراتif ( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE) ) مثلا می خوام که یک شکل رو بکشه. درست عمل می کنه. منظورم اینه که سیستم همیشه پیام می ده و دائم وارد این شرط می شه؟ اگه اینطور نباشه شکل باید خاموش روشن بشه و به طور پیوسته نشون داده نشه که این اتفاق نمی افته!
هر پیامی که به برنامه فرستاده بشه تو یک صف قرار می گیره بعد تابع PeekMessage اگه پیامی باشه اونو در یافت میکنه
برای همین هیچ پیامی از بین نمی ره برنامه هم کارشو انجام میده.
amsjavan
25-08-2008, 09:44
هر پیامی که به برنامه فرستاده بشه تو یک صف قرار می گیره بعد تابع PeekMessage اگه پیامی باشه اونو در یافت میکنه
برای همین هیچ پیامی از بین نمی ره برنامه هم کارشو انجام میده.
منظورم این نبود. سوالم اینه که آیا همیشه windows در حال پیام فرستانه که دائم وارد شرط if میشه؟
منظورم این نبود. سوالم اینه که آیا همیشه windows در حال پیام فرستانه که دائم وارد شرط if میشه؟
راستش در این مورد زیاد مطمعن نیستم که به چه صورته، ولی فکر میکنم تا زمانی که یه رخدادی
حالا یا از طرف کاربر یا از دیگر برنامه مرتبط با برنامه ما نباشه پیامی صادر نشه، البته بازم میگم در این مورد زیاد اطلاع ندارم
bahareh655
07-09-2008, 00:02
سلام
من پروژه ام،هسته اصلی اش برنامه نویسی ویندوزه!
ولی اصلا تجربه ای در این زمینه ندارم!
برای شروع پروژه باید یه dll نمونه بنویسم و بعد اون رو از طریق یه برنامه ی دیگه صدا بزنم،می خواستم اگه کسی تجربه نوشتن یه dll رو داره،لطف کنه کمکم کنه!
پیشاپیش ازتون ممنونم
mic_makarti
07-09-2008, 16:16
سلام .
درباره دی ال ال :
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ](VS.85).aspx
amsjavan
08-09-2008, 22:59
این کد رو نو visual c++ 2005 نوشتم:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
نمی دونم چرا این error رو میده:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
وقتی هم که به LPCWSTR تبدیل می کنم عنوان پنجره رو به یه زبون دیگه می نویسه! توی visual c++ 6 هم error link میده و اجرا نمیشه!
سلام
اررور اولی بخاطر اینه که شما یه رشته رو مستقیم تو متغیر ریختی در این خط
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
باید از قبل این رشته ای ای به عنوان کلاس هست رو تعریف کنی بعد به lpszClassName اختصاص بدی.
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اررور بعددی به این دلیله که این کامپایلر بطور پیشفرض تمام رشته ها رو یونیکد فرض میکنه، که برای حلش دو تا کار میشه کرد
1 - تو تنظیمات کامپایلر نوع رشته رو تغییر بدیم به اینصورت اول وارد منوی Project->Project Name Properties بشین(Project Name اسم پروژت هست)
بعد قسمت Character Set رو به Use Multi-Byte Character Set تغییر بدی
2- راه دوم اینه که شما تمام رشته ها داخل کد رو مشخص کنید یونیکد هست به اینصورت که اول هر رشته حرف L رو قرار بدین
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
amsjavan
09-09-2008, 17:04
خیلی ممنون که جواب دادین
اررور اولی بخاطر اینه که شما یه رشته رو مستقیم تو متغیر ریختی در این خط
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدباید از قبل این رشته ای ای به عنوان کلاس هست رو تعریف کنی بعد به lpszClassName اختصاص بدی.
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیداین کار رو کردم باز هم error داد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
درست نفهمیدم چرا این کاری که شما گفتید رو باید انجام داد! من قبلا این اسم رو به عنوان ثابت تعریف می کردم و بعد به lpszClassName نسبت می دادم. تو تعریف ثابت اصلا از LPSTR استفاده نمی کردم! LPSTR مگه همون
* char نیست؟
amsjavan
09-09-2008, 17:24
جلوی اون خط هم یه L گذاشتم درست شد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این L دقیقا چی کار می کنه؟
خیلی ممنون که جواب دادین
این کار رو کردم باز هم error داد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
درست نفهمیدم چرا این کاری که شما گفتید رو باید انجام داد! من قبلا این اسم رو به عنوان ثابت تعریف می کردم و بعد به lpszClassName نسبت می دادم. تو تعریف ثابت اصلا از LPSTR استفاده نمی کردم! LPSTR مگه همون
* char نیست؟
ایکارو باید بعد اینکه اون تنظیماتی که در مورد Character Set گفتم انجام بدین. در غیر اینصورت L رو به رشته اضافه میکنید
LPSTR و * char همونطور که گفتین یکی هستن. حالا چرا من به این شکل استفاده کردم بیشتر بر حسب عادت بوده دلیل خاصی نداره.
جلوی اون خط هم یه L گذاشتم درست شد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این L دقیقا چی کار می کنه؟
بله حق با شماست. در این حالت چون lpszClassName به صورت LPCSTR تعریف شده میشه مستقیم رشته رو وارد کرد
L هم نشون میده رشته از نوع یونیکد هست.
amsjavan
09-09-2008, 23:28
منظورم این نبود که چرا به جای * char، از LPCSTR استفاده می کنید! من قبلا تو visual c++ 6 یه اسمی رو define می کردم:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدبعد WinClassName رو به lpszClassName نسبت می دادم:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدیعنی اینجا به LPCSTR تبدیل نمی کردم!
منظورم این نبود که چرا به جای * char، از LPCSTR استفاده می کنید! من قبلا تو visual c++ 6 یه اسمی رو define می کردم:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدبعد WinClassName رو به lpszClassName نسبت می دادم:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدیعنی اینجا به LPCSTR تبدیل نمی کردم!
درست منظورتون رو از جمله آخر که گفتین "یعنی اینجا به LPCSTR تبدیل نمی کردم!" رو متوجه نشدم. چی رو تبدیل میکردین؟
مهم اینه که lpszClassName به صورت LPCSTR تعریف شده و شما میتونید رشته رو داخل کد به صورت مستقیم
هم اختصاص بدین حالا فرقی نداره رشته قبلا به چه شکل تعریف شده باشه.
amsjavan
10-09-2008, 11:30
خیلی ممنون. یه چیزی رو قاطی کرده بودم الان فهمیدم.
bahareh655
24-09-2008, 00:08
سلام دوستان
من تازه برنامه نویسی ویندوز با 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:
برای ساخت 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 هم اطلاعی ندارم
شاد باشید
bahareh655
01-10-2008, 18:06
سلام
ضمن عرض تشکر بابت جواب کامل به سوالاتم:20:
به چند تا مشکل برخوردم که اگه بازم لطف کنید و پاسخ بدید،ازتون ممنون میشم!
برای ساخت dll در کامپایلر ++VC نسخه 2005 اول یه پروژه win32 Project یا win32 console application رو انتخاب میکنید تو صفحه ظاهر شده گزینه DLL رو بزنید که مشخص بشه پروژه از نوع dll هست.
راستش من از Visual C++ 6 استفاده می کنم!
بعد از انتخاب win32 console application ،تو صفحه بعد گزینه ای مبنی بر انتخاب dll وجود نداره،شکل های زیر:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
به عنوان مثال فایهای dll.cpp و dll.h رو ایجاد کنید به این صورت. بعدم کامپایلکنید تا dll درست بشه
اگه منظورتون این بوده که اول یه فایل با نام dll.cpp از نوع C++ Source File مثل شکل پایین ایجاد کنم و دوباره یه صفحه جدید از این نوع،این بار با اسم dll.h ایجاد کنم و کدهای مربوطه رو تو صفحات کپی کنم و بعد کدها رو Build کنم،این کارا رو کردم،ولی فایل dll ساخته نشد تا اونو تو دایرکتوری system ویندوز کپی کنم و بعد با یه کد دیگه اونو فراخونی کنم و فقط فایل .lib ایجاد شد!
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
در ضمن موقع کامپایل کردن هم با این لینک ارورها مواجه شدم:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
میشه در مورد این دو تا خطا توضیح بدین که علت بوجود اومدنشون چیه؟
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
وقتی که کد بالا رو هم تو یه صفحه دیگه کپی و اجرا می کنم،میگه: "dll.lib " رو نمی تونه باز کنه!
من حتی واسه این کد یه workspace جدیدم ایجاد کردم و بعد از اجرا،دوباره می گفت نمی تونه "dll.lib " رو باز کنه!
اگه ممکنه در مورد اینکه : اصلاً این کد چه توی یه صفحه جدید از همون workspace و چه توی یه workspace جدید ایجاد بشه، چه طوری(طی چه عملیاتی) می تونه فایل "dll.lib " رو پیدا کنه،توضیح بدین!
در مورد HANDLE : برای کار با اشیاء مثلها فایهال و پروسه ها و ... احتیاج به جور حق دسترسییا حالا هر چی بشه اسمشو گزاشت هست که بهش هندل میگن
LPTSTR : قسمت LP هموناشاره گر هست، T وقتی پروژه رو بخوان هم بصورت اسکی و یونیکد بدن از این استفادهمیکنن و STR هم که معلومه رشتس که اگه T رو در نظر نگیریم معادل این میشه
توضیحاتتون در مورد این دو تا خیلی کامل بود،فقط می خواستم بدونم که instance یه شی ای از هر نوع داده می تونه باشه یا خودش یه DataType هستش؟
در مورد سوال آخر مثالهایی که MSDN داره بیشتر ترکیب C و win32 api هست.
ولی اگه ترکیب api ها با کلاسهای ++C رو بخواین این سایت رو بد نیست ببینید.
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
من کتاب "C++ in action " رو تو این سایت دیدم،یکی از فصلاش با عنوان "Windows techniques " بود،منظورتون این فصله؟
یه نگاه کلی بهش انداختم،می خواستم بدونم Syntax ها رو کامل توضیح داده؟ شما این فصلو کامل خوندین؟
در ضمن یه کتابخونه ی ویندوز هم نوشتن با عنوان "RSWL "،من دانلود و نصبش کردم،تو توضیحاتش اومده که: نمونه کدهای ویندوزی از جمله DLL رو داره.شما هم نمونه کدهاشو مطالعه فرمودین؟
شاد باشید
شما هم همینطور!
بازم از اینکه وقت می ذارین و اینقدر کامل به سوالات پاسخ می دین،ازتون تشکر می کنم:20:
bahareh655
01-10-2008, 18:39
سلام amsjavan !
با توجه به پست های قبلی تون،شما ظاهراً برنامه نویسی ویندوزو از روی کتاب دارین دنبال می کنین!
می خواستم لطف کنین اسم اون کتابو (در مورد برنامه نویسی ویندوز با C++ )یا اگه کتاب دیگه ای سراغ دارین،معرفی کنین که تمام دستورات رو از اول و کامل توضیح داده باشه و مطالبی در مورد درایور نویسی،dll نویسی و نوشتن wrapper داشته باشه!
می دونم msdn مرجع کاملیه،ولی ترجیح می دم از روی کتاب کار کنم!
ممنون
bahareh655
01-10-2008, 18:54
سلام
اررور بعددی به این دلیله که این کامپایلر بطور پیشفرض تمام رشته ها رو یونیکد فرض میکنه، که برای حلش دو تا کار میشه کرد
1 - تو تنظیمات کامپایلر نوع رشته رو تغییر بدیم به اینصورت اول وارد منوی Project->Project Name Properties بشین(Project Name اسم پروژت هست)
بعد قسمت Character Set رو به Use Multi-Byte Character Set تغییر بدی
2- راه دوم اینه که شما تمام رشته ها داخل کد رو مشخص کنید یونیکد هست به اینصورت که اول هر رشته حرف L رو قرار بدین
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
ببخشید شما گفتید برای تغییر دادن کامپایلر در مورد UNICODE در نظر گرفتن رشته ها،راه اول اینه که بریم تو منوی Project و ...
راستش تو منوی Project من هم چین چیزی وجود نداره،می خواستم ببینم برای تغییر تنظیمات کامپایلر باید کار دیگه ای بکنم یا جای دیگه ای برم؟!
(من از VC++ 6 استفاده می کنم!)
ممنون میشم اگه راهنماییم کنین.
در ضمن برنامه msdn رو میشه از خود سایت مایکروسافت دانلود و نصب کرد؟!
من ورژن 2001 اش رو دارم،ولی هم قدیمیه و هم بعضی جاهاش درست نصب نمی شه!
سلام
راستش من از Visual C++ 6 استفاده می کنم!
بعد از انتخاب win32 console application ،تو صفحه بعد گزینه ای مبنی بر انتخاب dll وجود نداره،شکل های زیر:
خوب شما پروژه رو از نوع Win32 Dynamic-Link Library بزارین مشکلای دیگه هم حل میشه
همون مثال رو براتون درست کردم، شامل دوتا پوشه هست، پروژه ای که در پوشه dll هست رو اگه کامپایل کنید بهتون فایل های
dll.dll و dll.lib رو میده بعد این دو فایل به اضافه ی dll.h رو کنار پروژه مورد نظرتون بزارین. که من یه پروژه آزمایشی
در پوشه dlltest درست کردم کافیه کامپایل کنید و نتیجه رو ببینید
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
،فقط می خواستم بدونم که instance یه شی ای از هر نوع داده می تونه باشه یا خودش یه DataType هستش؟
خودش یه نوع داده هست.میشه گفت یه هندل به فایل اجرایی در حافظه هست.
من کتاب "C++ in action " رو تو این سایت دیدم،یکی از فصلاش با عنوان "Windows techniques " بود،منظورتون این فصله؟
یه نگاه کلی بهش انداختم،می خواستم بدونم Syntax ها رو کامل توضیح داده؟ شما این فصلو کامل خوندین؟
- بله
- کامل نخوندم بیشتر مقدشو خوندم که ببینم در مورد چی هست و ....
ولی اگه کمی با API آشنا باشین و مقداری هم ++C بدونین با خوندن اون قسمت فکر میکنم تا حدودی کار راه بنداز باشه
در ضمن یه کتابخونه ی ویندوز هم نوشتن با عنوان "RSWL "،من دانلود و نصبش کردم،تو توضیحاتش اومده که: نمونه کدهای ویندوزی از جمله DLL رو داره.شما هم نمونه کدهاشو مطالعه فرمودین؟
نه راستش ندیده بودم، ولی به نظر جالب میاد
ببخشید شما گفتید برای تغییر دادن کامپایلر در مورد UNICODE در نظر گرفتن رشته ها،راه اول اینه که بریم تو منوی Project و ...
راستش تو منوی Project من هم چین چیزی وجود نداره،می خواستم ببینم برای تغییر تنظیمات کامپایلر باید کار دیگه ای بکنم یا جای دیگه ای برم؟!
(من از VC++ 6 استفاده می کنم!)
والا تو این ورژن نمیدونم تنظیماتش کجاست ولی راه ساده تری هست که خودمم استفاده میکنم قرار دادن این کد در اول سورس برنامه هست
باید حتما قبل بقیه کدها باشه
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در ضمن برنامه msdn رو میشه از خود سایت مایکروسافت دانلود و نصب کرد؟!
من ورژن 2001 اش رو دارم،ولی هم قدیمیه و هم بعضی جاهاش درست نصب نمی شه!
شدنش که میشه فقط حجمش حدود 2 گیگ هست،
این لینک رو ببینید:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
شاد باشید
bahareh655
04-10-2008, 18:13
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
سلام
واقعاً ممنونم بابت جوابهای مفید و کاملتون:20:
فقط می خواستم خواهش کنم اگه ممکنه این دمو رو که تو رپیدشر آپلود کردین،یه جای دیگه مثل:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
آپلود کنید،چون وقتی میرم تو رپیدشر و free user رو می زنم،لینک دانلودو نمیاره!
بازم ممنون
موفق باشید
amsjavan
09-10-2008, 08:30
سلام amsjavan !
با توجه به پست های قبلی تون،شما ظاهراً برنامه نویسی ویندوزو از روی کتاب دارین دنبال می کنین!
می خواستم لطف کنین اسم اون کتابو (در مورد برنامه نویسی ویندوز با C++ )یا اگه کتاب دیگه ای سراغ دارین،معرفی کنین که تمام دستورات رو از اول و کامل توضیح داده باشه و مطالبی در مورد درایور نویسی،dll نویسی و نوشتن wrapper داشته باشه!
می دونم msdn مرجع کاملیه،ولی ترجیح می دم از روی کتاب کار کنم!
ممنون
سلام
من از یه کتاب قدیمی استفاده کردم که اونو به شما پیشنهاد نمی کنم.
Programming Windows by Charles Petzold کتاب خیلی خوبیه البته خودم هنوز نخوندمش!
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدیا
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این هم خوبه:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
سلام
واقعاً ممنونم بابت جوابهای مفید و کاملتون:20:
فقط می خواستم خواهش کنم اگه ممکنه این دمو رو که تو رپیدشر آپلود کردین،یه جای دیگه مثل:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
آپلود کنید،چون وقتی میرم تو رپیدشر و free user رو می زنم،لینک دانلودو نمیاره!
بازم ممنون
موفق باشید
قابلی نداشت، این خدمت شما :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
شاد باشید
bahareh655
25-12-2008, 12:28
سلام
من توی کامپایل یه برنامه تحت عنوان CSP که مخفف Cryptograohic Service Provider هستش،دچار مشکل شدم!
یه بسته ای به نام cspdk با حجم 1.4 مگ توی سایت مایکروسافت هست که شامل کد نمونه و قالب csp میشه ،اینم لینکش:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
csp به صورت یه اینترفیس میتونه با توابع CryptoAPI ارتباط برقرار کنه و از طرفی میتونه برای کاربردهای رمزنگاری توی کارت هوشمند بکار بره!
توضیحات کاملش در سایت MSDN موجوده...
من باید یه CSP نمونه که بصورت DLL پیاده سازی میشه بنویسم،ولی با کامپایل و کار با این بسته مشکل پیدا کردم!
از کسایی که تو این زمینه کار کردن و یا اینکه میتونن این CSP نمونه رو به صورت DLL کامپایل کنن و یا اینکه کسی رو که در این زمینه وارد هستش سراغ دارن ،عاجزانه خواهش می کنم کمکم کنن،خیلی نیاز به کمک دارم!
در ضمن کسی تو نوشتن wrapper برای تبدیل دستورات رمزنگاری به دستورات کارت هوشمند تجربه داره؟
لطفا اگه می تونید،هر چه زودتر کمکم کنید،وقتم خیلی کمه
با تشکر از شما:40:
bahareh655
29-12-2008, 02:04
سلام
من توی ویژوال ++C ورژن 6 ،یه پروژه dll ایجاد کردم و کد فایل csp.c رو توش کپی کردم (هم چنین دو تا هدر فایل csp.h و cspdk.h رو هم توی فولدر include در جایی که ویژوال ++C نصب شده،کپی کردم)و کامپایل کردم ولی 102 تا ارور داد که اکثرا از cspdk.h می گرفت که فلان متغیر undeclared identifier هستش و ...
بعد تصمیم گرفتم که فایل نوت پد csptest رو در یه پروژه win32 console application وارد کنم و فایل csp.dll موجود در بسته cspdk رو در فولدر مربوط به اون کپی کنم و بعد کامپایل کنم که در این حالت هم 38 تا ارور می داد!
الآن واقعا نمی دونم که چه طور باید اونو کامپایل کنم که یه نتیجه معقول ببینم؟!
خواهش می کنم اگه در مورد فایل های dll چیزی می دونین کمک کنین،واقعا نیاز به کمک دارم
ممنون:20:
bahareh655
29-12-2008, 02:18
سلام
من توی ویژوال ++C ورژن 6 ،یه پروژه dll ایجاد کردم و کد فایل csp.c رو توش کپی کردم (هم چنین دو تا هدر فایل csp.h و cspdk.h رو هم توی فولدر include در جایی که ویژوال ++C نصب شده،کپی کردم)و کامپایل کردم ولی 102 تا ارور داد که اکثرا از cspdk.h می گرفت که فلان متغیر undeclared identifier هستش و ...
بعد تصمیم گرفتم که فایل نوت پد csptest رو در یه پروژه win32 console application وارد کنم و فایل csp.dll موجود در بسته cspdk رو در فولدر مربوط به اون کپی کنم و بعد کامپایل کنم که در این حالت هم 38 تا ارور می داد!
الآن واقعا نمی دونم که چه طور باید اونو کامپایل کنم که یه نتیجه معقول ببینم؟!
خواهش می کنم اگه در مورد فایل های dll چیزی می دونین کمک کنین،واقعا نیاز به کمک دارم
ممنون:20:
سلام
من اون بسته رو که گفتین گرفتم محتویات فایل هایی که تو پوشه های csp و sdkinc بود رو توی یک پروژه از نوع Win32 Dynamic-Link Library اضافه کردم
و در آخر کامپایل کردم، نتیجه رو براتون میزارم، متاسفانه با CSP کار نکردم که بتونم بهتر کمکتون کنم
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
شاد باشید
bahareh655
29-12-2008, 18:36
سلام واقعا ممنونم ازتون ،خیلی خوشحال شدم که جواب دادین
راستش من هم مراحل کامپایل یه فایل dll رو انجام دادم ولی نمی دونم چرا 102 تا ارور می ده!
من فولدری که شما زحمت کشیده بودین و درست کرده بودین دانلود کردم،تو فولدر release اون این فایلها بودن:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
می خواستم ببینم فایل های lib و res و ... چه طوری تولید شدن؟
آخه من هم اول یه پروژه از نوع win32 dll تو ویژوال ++C انتخاب می کنم و کد مربوط به csp.c رو توش وارد می کنم ولی بعد از کامپایل 102 تا ارور میده!
در ضمن من دو تا فایل cspdk.h و wincrypt.h رو هم تو فولدر include جاییکه ویژوال ++C نصب شده،کپی کردم!
بعد تصمیم گرفتم فایل csp.dll موجود در بسته رو توی فولدر test csp یعنی برنامه کاربردی که csp.dll رو صدا می زنه کپی کنم،از طرفی فایل csp.dll و cspinst.exe و testcsp.exe رو هم طبق readme خود بسته توی دایرکتوری windows/system32 کپی کردم،ولی بازم هیچ خروجی ندیدم!
البته تو readme این توضیحاتو واسه windows CE (wince نوشته،ولی من از ویندوز XP استفاده می کنم
راستش برای sign کردنش هم اونطور که در readme نوشته شده، دستور مربوطه رو در command line نوشتم ولی پیغام داد که نمی تونه csp.dll رو باز کنه و ....
به هرحال...
من فکر کنم شما فایل csp.dll رو که در فولدر release گذاشتین،خودتون تونستین تولید کنید،اینه که ازتون خواهش می کنم اگه امکان داره تمام مراحلی که انجام دادین تا فایل csp.dll و csp.lib تولید شد رو بفرمایین و اینکه بعد از کامپایل فایل csp.dsw هیچ اروری نمی بینین؟
از طرفی تونستین که با استفاده از برنامه testcsp.c ، فایل csp.dll رو صدا بزنین؟
ممنون میشم اگه مثل همیشه کامل جواب بدین.
با تشکر
سلام
می خواستم ببینم فایل های lib و res و ... چه طوری تولید شدن؟
بعد کامپایل اینا تولید میشن
خوب من مراحلی رو که انجام دادم میگم، امیدوارم کمکی بکنه:
1 - ایجاد پروژه Win32 Dynamic-Link Library
2 - انتخاب An empty DLL project
3 - اضافه کردن تمام فایلهای پوشه csp و sdkinc به داخل پوشه پروژه ای که ایجاد کردم
4 - حالا باید تمام این فایل ها به خود پروژه هم اضافه بشن، بعد اضافه کردن این فایلها محیط ++VC به این صورت میشه
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
5 - به خاطر اینکه ما فایلهای wincrypt.h و cspdk.h رو کنار دیگر فایلها در یک پوشه قرار دادیم باید تغییراتی در csp.c و autoreg.cpp بدهیم
به این صورت که هدر فایلهای که گفتم یعنی wincrypt.h و cspdk.h رو که داخل <> قرار دارن رو داخل " " قرار میدهید
مثلا فایل csp.c اینجوری میشه
قبل :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و بعدش
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و فایل autoreg.cpp هم فقط برای cspdk.h این کارو انجام میدین
6 - حالا میتونید کامپایل کنید و نتیجه رو ببینید
البته بهتره در حالت Release بزارین بعد کامپایل کنید از منوی Build->Set Active Configuration
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
خیر
از طرفی تونستین که با استفاده از برنامه testcsp.c ، فایل csp.dll رو صدا بزنین؟
این مراحل رو تست کنید احتمالا به نتیجه میرسید.
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
شاد باشید
bahareh655
02-01-2009, 13:21
ضمن عرض سلام و تشکر مجدد
راستش من تمام اون مراحلی که شما فرمودین رو انجام دادم ولی متاسفانه بازم با همون 102 تا ارورر مواجه شدم که بیشتر از فایل cspdk.h می گرفت،اینم عکسش:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
می تونم بپرسم شما از کدوم ورژن ویژوال استودیو استفاده می کنید؟
من از ورژن 6 استفاده می کنم،امکان داره به خاطر این باشه؟ یعنی اگه از ورژن 8 (2005 ) یا 9 (2008 ) استفاده کنم،دیگه این ارورها رو نبینم؟
در ضمن شما فایل های cspdk.h و wincrypt.h رو توی پوشه include جایی که ویژوال ++C نصب شده ،کپی نمی کنین؟ یعنی فقط همون add کردن به پروژه کافیه؟
ممنون
bahareh655
02-01-2009, 17:24
ببخشید یه چیز دیگه!
بعد از کامپایل کد cspinstl ، یعنی برنامه ای که csp رو وارد رجیستری سیستم کنه،آیا یه registery entry ایجاد میشه؟
منظورم از رجیستری entry هم چین فایلیه (یعنی شبیه این فایل برای وارد کردن csp به لیست رجیستری ویندوز):
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
لطفا اگه می تونین تا امشب جواب بدین،ممنون
می تونم بپرسم شما از کدوم ورژن ویژوال استودیو استفاده می کنید؟
من از ورژن 6 استفاده می کنم،امکان داره به خاطر این باشه؟ یعنی اگه از ورژن 8 (2005 ) یا 9 (2008 ) استفاده کنم،دیگه این ارورها رو نبینم؟
از نسخه 6 ، اون dll هم که داخل اون بسته بود و شما لینک دانلودش رو داده بودین با همین ورژن کامپایل شده
در ضمن شما فایل های cspdk.h و wincrypt.h رو توی پوشه include جایی که ویژوال ++C نصب شده ،کپی نمی کنین؟
من تو پوشه ای که پروژه رو ایجاد کردم کپیشون کردم. اون سورسی که قبلا کامپایل کردم رو باز یه نگاهی بکنید
ببینید همون رو با همون تنظیمات میتونید کامپایل کنید اگه مشکلی نداره روی همون هر کاری می خواید انجام بدین
شاد باشید
ببخشید یه چیز دیگه!
بعد از کامپایل کد cspinstl ، یعنی برنامه ای که csp رو وارد رجیستری سیستم کنه،آیا یه registery entry ایجاد میشه؟
منظورم از رجیستری entry هم چین فایلیه (یعنی شبیه این فایل برای وارد کردن csp به لیست رجیستری ویندوز):
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
لطفا اگه می تونین تا امشب جواب بدین،ممنون
من به این شکل تست کردم و یه کلید به نام CSP Provider به رجیستری اضافه شد
فایلهای CSP.DLL و CSPINSTL.EXE و csp.sig و TESTCSP.EXE رو تو پوشه system32 بریزین
با این دستور فایلی به نام cspsign ایجاد میشه
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
بعد با دستور cspinstl.exe کلید به رجیستری اضافه میشه این مسیر
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
شاد باشید
bahareh655
02-01-2009, 18:51
سلام
واقعا ببخشید که دوباره میپرسم
من تمام اون مراحلی که شما نوشتین رو انجام دادم
ولی پوشه این شکلی میشه
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
علت وجود دو تا پوشه debug و release اینه که بعد از انتخاب win32 dll در ویژوال استودیو،و وارد کردن فایل ها،قبل از کامپایل ، مد release رو انتخاب می کنم،ولی نمی دونم چرا هم پوشه debug ایجاد میشه و هم release ؟
در صورتیکه در پوشه ای که شما csp رو کامپایل کرده بودین،فقط فولدر release وجود داشت!
علتش چیه؟
یعنی شما چه موقع حالت release رو انتخاب کردین که فقط پوشه release موجوده؟
محتویات موجود در پوشه ای که آپلود کردین اینه:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
چرا با اینکه من بعد از ایجاد یه dll خالی تمام فایل ها رو به پروژه add می کنم،همه فایل ها در پوشه مربوط به پروژه ای که ایجاد کردم قرار نمی گیره؟
واقعا نمی دونم چی کار کنم؟!
اول فکر می کردم چون ورژن ویژوال استودیو من 6 هست،این مشکلات پیش می یاد،ولی شما هم گفتین که از ورژن 6 استفاده می کنین!
به نظرتون من کجای کار رو اشتباه می کنم؟
البته بعد از اینکه فایل ها رو add می کنم،توی لیست، فایل csp.rc به جای اینکه تو بخش resource files باشه،تو بخش source flies قرار می گیره!
تو دو تا پست قبلی شکلش هست،به نظر تون اشکال از این جا هست یا از کجا میتونه باشه؟
لطفا تا حد ممکن کمکم کنید،دیگه نمی دونم چی کار باید بکنم؟
علت وجود دو تا پوشه debug و release اینه که بعد از انتخاب win32 dll در ویژوال استودیو،و وارد کردن فایل ها،قبل از کامپایل ، مد release رو انتخاب می کنم،ولی نمی دونم چرا هم پوشه debug ایجاد میشه و هم release ؟
در صورتیکه در پوشه ای که شما csp رو کامپایل کرده بودین،فقط فولدر release وجود داشت!
علتش چیه؟
یعنی شما چه موقع حالت release رو انتخاب کردین که فقط پوشه release موجوده؟
من برای اینکه حجم فایل که آپلود کردم کم باشه فایل ها و پوشه های بدرد نخور رو از توش پاک کردم
چرا با اینکه من بعد از ایجاد یه dll خالی تمام فایل ها رو به پروژه add می کنم،همه فایل ها در پوشه مربوط به پروژه ای که ایجاد کردم قرار نمی گیره؟
واقعا نمی دونم چی کار کنم؟!
اول فکر می کردم چون ورژن ویژوال استودیو من 6 هست،این مشکلات پیش می یاد،ولی شما هم گفتین که از ورژن 6 استفاده می کنین!
به نظرتون من کجای کار رو اشتباه می کنم؟
البته بعد از اینکه فایل ها رو add می کنم،توی لیست، فایل csp.rc به جای اینکه تو بخش resource files باشه،تو بخش source flies قرار می گیره!
تو دو تا پست قبلی شکلش هست،به نظر تون اشکال از این جا هست یا از کجا میتونه باشه؟
لطفا تا حد ممکن کمکم کنید،دیگه نمی دونم چی کار باید بکنم؟
راستش نمیدونم هر چی که خودم انجام داده بودم رو گفتم، ولی برای اینکه در این مورد به نتیجه برسین من فیلم کوتاهی از کاری
که خودم انجام میدم درست کردم امیدوارم مشکلتون رو حل کنه حجمش 674 کیلوبایته خیلی سعس کردم حجمش کم باشه
اگه هنوز با کامپایل مشکل دارین از این لینک میتونید دانلود کنیدش
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
شاد باشید
bahareh655
03-01-2009, 13:50
سلام
ببخشید اگه ممکنه بفرمایید فرق load-time dynamic linking با run-time dynamic linking چیه؟
توضیحات موجود در msdn رو دیدم،ولی ظاهرا توی همین برنامه csp ، از load-time linking استفاده شده!
می خواستم ببینم مزیت کدوم یکی بیشتره؟
یه سوال دیگه:
آیا برای ساختن هر فایل dll ، حتما باید یه فایل def. یا h. هم تعریف کرد تا دو تا فایل dll و lib ساخته بشه؟
ممنون میشم اگه مثل همیشه راهنمایی کنید
ببخشید اگه ممکنه بفرمایید فرق load-time dynamic linking با run-time dynamic linking چیه؟
توضیحات موجود در msdn رو دیدم،ولی ظاهرا توی همین برنامه csp ، از load-time linking استفاده شده!
می خواستم ببینم مزیت کدوم یکی بیشتره؟
کار با load-time dynamic linking راحتتر است چون شما فقط نام توابع رو مینویسید و استفاده میکنید مثل برنامه csp که خودتون هم بهش اشاره کردین
ولی در run-time dynamic linking باید با توابع LoadLibrary و GetProcAddress کتابخانه مربوطه لود و آدرس تابع های مورد نیاز گرفته بشه تا بتونیم از توابع استفاده کنیم
مثلا اگه یه dll به نام test.dll داشته باشیم که بخواهیم تابعی به نام MyFunction رو فراخانی کنیم باید همچین کدی بنویسیم
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
ولی همین تابع در load-time dynamic linking به راحتی با این دستور قابل دسترسی هست
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
آیا برای ساختن هر فایل dll ، حتما باید یه فایل def. یا h. هم تعریف کرد تا دو تا فایل dll و lib ساخته بشه؟
ممنون میشم اگه مثل همیشه راهنمایی کنید
نه لزوما، ولی وقتی یه dll با مثلا 100 تابع می سازیم حالا اگر بخوایم این رو در یه برنامه استفاده کنیم تعریف تک تک توابع
در برنامه کار خسته کننده هست برای همین تمام تعریفات توابع در یک فایل h. قرار میگیره تا راحت هر جا خواستیم
کنار برنامه کپی کنیم و از توابع استفاده کنیم
و در مورد def. فایل خوب یه dll یکسری توابع رو اصطلاحا export میکنه که قابل استفاده در دیگر برنامه ها باشه
حالا به طریقی کامپایلر باید این توابع رو بشناسه یه راه استفاده از همین فایل هست. اگه ما اینو تعریف نکنیم
در نتیجه dll تابعی export نمیکنه و ما هم نمیتوانیم از اون توابع استفاده کنیم
برای اینکه موضوع براتون روشن تر بشه خوبه که مثلا ببینیم یه dll چه توابعی رو export میکنه
و بد نیست با ابزار dumpbin که همراه ویزوال استادیو هم هست آشنا بشیم
این ابزار در این پوشه است
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و اینجوری میشه توابع Export شده یه dll رو مشاهده کرد،
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
خوبه خودتون یه بار برنامه رو یک بار بدون فایل def. و یک بار هم حالتی که این فایل وجود داره dll رو کامپایل کنید و نتیجه رو ببینید.
شاد باشید
bahareh655
07-01-2009, 10:19
سلام
ببخشید من این نمونه کدها رو از سایت msdn گرفتم ،نمونه کد ساده ایه که بعد از توضیح فایل های dll گذاشته شده؛
کد مربوط به dll :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
کد صدا زننده ی dll در حالت load-time :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
کد صدا زننده ی dll در حالت run-time :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
راستش من این سه تا برنامه رو در سه پروژه ی جداگانه کامپایل کردم که هر سه تاشون بدون ارور و وارنینگ کامپایل شدن.
ولی تو نوشتن فایل هدر که بتونه توابع رو export کنه، دچار مشکل شدم، یعنی یه فایل از نوع text به پروژه ی مربوط به برنامه dll (فایل myputs ) اضافه کردم و تابع myputs رو توش اعلان کردم و ...
بعد از این کار که برنامه ی dll رو اجرا کردم، 2 تا ارور لینک داد، خودم فکر می کنم فایل هدرش رو اشتباه نوشتم!
اگه ممکنه کدهای مربوط به یه فایل هدر که بتونه این برنامه ها رو اجرا کنه، اینجا بذارید که بشه dll و lib رو ساخت و تو دو تا برنامه load-time و run-time ازش استفاده کرد!
اگه موفق به اجرای برنامه ها شدین،لطفا بفرمایین خروجی برنامه چیه؟ (یعنی بعد از اجرا ، تو دو برنامه فراخوان در حالت load و run ،خروجی رو چی می بینیم؟)
در ضمن با توجه به فرق بین فایل h. و def. ، باید کدوم یکی رو تولید کنیم؟
- پس از این به بعد هر سورس کد مربوط به یه dll که پیدا کردیم،اگه خواستیم تو برنامه های کاربردی دیگه ازش استفاده کنیم،باید حتما یه فایل h. و def. هم تولید کنیم دیگه! درسته؟
- یه سوال دیگه:
اگه من بخوام یه سری توابع به اون نمونه کد قالب csp اضافه کنم،(مثلا یه الگوریتم hash یا یه الگوریتم cryptography (رمزنگاری) به اون قالب های تابع cryptoAPI ای که در کد CSP موجوده (همون 23 تا تابع) اضافه کنم،آیا باید هدر فایل و فایل def اش رو هم تغییر بدم؟
اصلا قواعد و دستورات نوشتن یه هدر فایل برای فایل های dll چه جوریه(در این مورد اگه لینکی که هم دستورات رو توضیح داده باشه و هم چند نمونه مثال داشته باشه،معرفی کنین ممنون میشم)
- در مورد این دستور:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
که برای مشاهده ی فایل های Export شده بود، من اینو تو محیط command کپی کردم و نتیجه اش این شد:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
در ضمن برنامه ویژوال استودیوی من (برنامه Dumpbin.exe ) دردرایو C و ویندوز (یعنی در واقع Cmd.exe ) در درایو D قرار داره ،امکان نداره به خاطر متفاوت بودن درایوها این ارور رو بده یا اینکه اصلا فایل csp.dll باید کجا قرار داشته باشه؟
ممنون
bahareh655
07-01-2009, 12:36
سلام
ببخشید یه سوال دیگه!
من تو کامپایل برنامه زیر دچار مشکل شدم:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این برنامه، کد الگوریتم AES (یه الگوریتم رمزنگاری در ویندوز) هستش،وقتی که اونو کامپایل می کنم،این سه تا ارور رو میده:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در ضمن در برنامه، هدر فایل<bcrypt.h > رو هم به "bcrypt.h " تغییر دادم،ولی باز این سه تا ارور رو داد!
به نظرتون چی کار باید بکنم؟
ممنون
سلام
ولی تو نوشتن فایل هدر که بتونه توابع رو export کنه، دچار مشکل شدم، یعنی یه فایل از نوع text به پروژه ی مربوط به برنامه dll (فایل myputs ) اضافه کردم و تابع myputs رو توش اعلان کردم و ...
بعد از این کار که برنامه ی dll رو اجرا کردم، 2 تا ارور لینک داد، خودم فکر می کنم فایل هدرش رو اشتباه نوشتم!
فایل هدر برای تعریف توابع است نه برای export کردن توابع برایexport کردن یا باید توابع مربوطه رو در یک
DEF. فایل قرار داد مثل نمونه هایی که قبلا خودتون گزاشته بودین یا اینکه قبل توابع مربوطه این دستور رو قرار داد
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
مثل نمونه dll که شما سورسش رو قرار دادین یعنی این
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اگه ممکنه کدهای مربوط به یه فایل هدر که بتونه این برنامه ها رو اجرا کنه، اینجا بذارید که بشه dll و lib رو ساخت و تو دو تا برنامه load-time و run-time ازش استفاده کرد!
شما همین سورس dll ای که قرار دادین بدون هیچ فایل اضافه ای کامپایل کنید فایل dll و lib ساخته میشن
و برای ساختن یه هدر فایل کافیه یه فایل h. بسازین و این دستور رو توش قرار بدین این برای load-time
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و این برای run-time:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اگه موفق به اجرای برنامه ها شدین،لطفا بفرمایین خروجی برنامه چیه؟ (یعنی بعد از اجرا ، تو دو برنامه فراخوان در حالت load و run ،خروجی رو چی می بینیم؟)
بعد اجرا باید رشته ای که به عنوان پارامتر به تابع myPuts فرستاده شده در صفحه ی کنسول چاپ بشه
در ضمن با توجه به فرق بین فایل h. و def. ، باید کدوم یکی رو تولید کنیم؟
در مورد این سورسی که گزاشتین دیگه نیازی به def. فایل نیست چون تو خود سورس dll تعریف شدن
ولی میتونید فایل h. رو ایجاد کنید (البته اینم تو خوده برنامه ها تعریف شدن مگر اینکه بخواین از سورس برنامه جداش کنید)
یه سوال دیگه:
اگه من بخوام یه سری توابع به اون نمونه کد قالب csp اضافه کنم،(مثلا یه الگوریتم hash یا یه الگوریتم cryptography (رمزنگاری) به اون قالب های تابع cryptoAPI ای که در کد CSP موجوده (همون 23 تا تابع) اضافه کنم،آیا باید هدر فایل و فایل def اش رو هم تغییر بدم؟
این مورد رو بهتره در msdn پیدا کنیدشاید مجبور باشید این کارا رو بصورت جدا انجام بدین چون خودم کار نکردم نظری ندارم
اصلا قواعد و دستورات نوشتن یه هدر فایل برای فایل های dll چه جوریه(در این مورد اگه لینکی که هم دستورات رو توضیح داده باشه و هم چند نمونه مثال داشته باشه،معرفی کنین ممنون میشم)
قواعد خاصی نداره همون قواعدی هست که برای تعریف یک تابع استفاده مکینیم فقط همین تعاریف
رو تو یه فایل h. به صورت جداگانه قرار میدیم
همونطور که گفتم مثلا در نمونه سورسی که شما گزاشتین دیگه هدر فایلی نیست و تابع داخل خود سورس برنامه تعریف شده (منظورم همون سورس load-time و run-time هست)
شما همینو میتونین جداش کنید
- در مورد این دستور:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
که برای مشاهده ی فایل های Export شده بود، من اینو تو محیط command کپی کردم و نتیجه اش این شد:
در ضمن برنامه ویژوال استودیوی من (برنامه Dumpbin.exe ) دردرایو C و ویندوز (یعنی در واقع Cmd.exe ) در درایو D قرار داره ،امکان نداره به خاطر متفاوت بودن درایوها این ارور رو بده یا اینکه اصلا فایل csp.dll باید کجا قرار داشته باشه؟
اینجور که از پیام معلومه فایل csp.dll رو پیدا نکرده فایل هر جایی میتونه باشه بهتره مسیر کامل فایل رو بدین،
بعد اجرای دستور باید همچین خروجی از csp.dll بگیرین
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
سلام
ببخشید یه سوال دیگه!
من تو کامپایل برنامه زیر دچار مشکل شدم:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این برنامه، کد الگوریتم AES (یه الگوریتم رمزنگاری در ویندوز) هستش،وقتی که اونو کامپایل می کنم،این سه تا ارور رو میده:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در ضمن در برنامه، هدر فایل<bcrypt.h > رو هم به "bcrypt.h " تغییر دادم،ولی باز این سه تا ارور رو داد!
به نظرتون چی کار باید بکنم؟
ممنون
این پروژه با Visual Studio 2005 ایجاد شده اگه با این ورژن یا بالا تر کامپایل کنین دیگه این مشکلو ندارین من با 2008 انجام دادم و درست کامپایل شد
شاد باشید
bahareh655
11-01-2009, 08:57
واقعاً ازتون ممنونم که اینقدر دقیق و کامل جواب میدین!
یه درخواست دیگه داشتم؛
برنامه زیر مربوط به یه PCSC درایور هستش:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
PC/SC همون کتابخونه Winscard.dll موجود در پوشه windows/system32 هستش که برای ارتباط برنامه های کاربردی در ویندوز (مثلا همون csp خودمون!) با کارت هوشمند بکار میره،اینم عکسش:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
من می خوام این برنامه رو کامپایل کنم، ولی باز دچار مشکل شدم،در ضمن فایل های exe. تولیدی برنامه هم در فولدر های release و debug موجوده!
در اصل برنامه pcsc_drv که در پوشه ای با همین نام هست،باید کامپایل بشه،فایل های لازم دیگه هم تو پوشه های دیگه ست!
اگه این برنامه رو با موفقیت کامپایل و اجرا کردین،لطفا به من هم اطلاع بدین.
در ضمن من این فایل ها رو از این سایت دانلود کردم(از قسمت part2 ):
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
توضیحات کاملترش در اونجا موجوده.
ممنون میشم اگه مثل همیشه جواب بدین!
سلام
همونطور که گفتین این یک درایور هست و برای کامپایل درایور باید روی سیستمتون DDK نصب باشه. این بسته حجمی حدود 200 یا 300 مگ داره می تونید از سایت ماکروسافت دانلود کنید
بعد از نصب باید تغییراتی هم در تنظیمات کامپایلرتون بدین، ترجیحا کامپایلر ورژن های جدید ++Visual C باشه مثلا من برای 2008 میگم
به این صورت که از منوی Tools گزینه Options رو انتخاب کنید و از پنجره ظاهر شده سمت چپ به Projects and Solutions->VC++ Directories برین در اینجا بالا لیستی هست از این لیست Include files رو انتخاب کنید حالا این دو مسیر رو بهش اضافه کنید البته با توجه به ورژن DDK ممکنه کمی این مسیر متفاوت باشه
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
بعد دوباره از همون لیست Library files رو انتخاب کنید و این مسیر رو اضافه کنید
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حالا این تنظیمات مربوط به خود پروژه هست به این صورت که بعد باز کردن پروژه در قسمت Solution Explorer بر روی pcsc_drv
راست کلیک کنید و Properties رو انتخاب کنید حالا این مسیر رو طی کنید
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و سمت راست مقدار Generate Manifest رو No کنید
بعد به این مسیر برین
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و مقدار Randomized Base Address رو به Default تغغیر بدین
حالا کامپایل کنید ممکنه یکسری warning بده ولی زیاد مهم نیستن بعد کامپایل چندا فایل exe و یک فایل sys در پوشه Debug قرار میگیره در همون پوشه اصلی
شاد باشید
bahareh655
16-01-2009, 00:35
سلام- وقتتون به خیر
1- آیا میشه روی یه سیستمی که ویژوال استودیو 2008 نصبه، ویژوال استودیو 6 رو هم نصب کرد؟ مشکلی در اجرای برنامه ها به طور جداگانه در دو محیط پیش نمی یاد؟
2- من چون نتونستم با 6 ++VC ، اون کد CSP رو کامپایل کنم(البته تمام اون مراحلی رو که شما زحمت کشیده بودین و در دمو نشون دادین رو کامل انجام دادم،ولی نشد) اینه که تصمیم گرفتم ویژوال استودیو 2008 رو نصب کنم!
پ.ن: دو روز پیش، در مورد مشکلی که با کامپایل CSP.DLL توی ویژوال استودیو 6 داشتم،یه نفر گفت که برای کامپایل این برنامه توی ++VC ورژن 6 ، باید یه سری تنظیمات دستی انجام می دادم،به خاطر همین اون 102 تا ارور رو ( که بیشتر در مورد نشناختن هدر فایل cspdk.h بود) دریافت می کردم ولی نسخه 2005 یا 2008 به طور خودکار این کارها رو انجام میده.
از جمله اینکه باید یه سری constant ها رو اضافه می کردم و ...(من که درست متوجه نشدم!)
ولی متاسفانه اصلا وقت نداشت که بهم کامل توضیح بده؛
هیچ جوری هم بهش دسترسی ندارم!
اینه که می خواستم از شما خواهش کنم مثل همیشه کمکم کنید
- آیا شما تنظیمات خاصی توی کامپایلر 6 ++VC دادین که csp.dll ( یا هر برنامه زبان ویندوزی) رو به راحتی کامپایل کردین؟
یعنی برای کامپایل یه هم چین کدهایی، نیاز هست که تنظیمات خاصی رو روی کامپایلر 6 ++VC انجام داد؟
احتمالا شاید شما( چون توی ویژوال ++C خیلی وارد هستین) قبلا توی یه برنامه دیگه ای یا شاید موقع نصب ویژوال استودیو این تنظیمات رو انجام دادین؟!
یعنی غیر از اون مراحلی که توی Demo نشون دادین، آیا هیچ تنظیمات پیش فرضی نمی خواد؟
چون من موقع نصب، فقط طبق روال عادی نصب کردم و هیچ تنظیماتی روی کامپایلر انجام ندادم!
چرا کامپایلر من هدر فایل csp.h یا wincrypt.h رو نمی شناخت و از داخل کدهای اونها ارور می گرفت؟
لطفا اگه ممکنه، در این خصوص راهنمایی کنید
با تشکر
jeremy28
16-01-2009, 22:41
سلام
من یه پروژه دارم (بصورت mfc ایه) که قبلا تو زبان ++VC ورژن 2005 کامپایل شده و حالا که من می خوام توی 2008 کامپایلش کنم،بعد از کامپایل این ارورها رو می بینم:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
به نظرتون چی کار باید انجام بدم (برنامه به زبون ویندوز نوشته شده)
مرسی
سلام
1- آیا میشه روی یه سیستمی که ویژوال استودیو 2008 نصبه، ویژوال استودیو 6 رو هم نصب کرد؟ مشکلی در اجرای برنامه ها به طور جداگانه در دو محیط پیش نمی یاد؟
بله میشه، من خودم هر دو ورژن رو دارم، البته اگه احتیاجی به ورژن 6 ندارین لزومی نداره نصبش کنید مگر به دلایلی مجبور باشین
- آیا شما تنظیمات خاصی توی کامپایلر 6 ++VC دادین که csp.dll ( یا هر برنامه زبان ویندوزی) رو به راحتی کامپایل کردین؟
یعنی برای کامپایل یه هم چین کدهایی، نیاز هست که تنظیمات خاصی رو روی کامپایلر 6 ++VC انجام داد؟
احتمالا شاید شما( چون توی ویژوال ++C خیلی وارد هستین) قبلا توی یه برنامه دیگه ای یا شاید موقع نصب ویژوال استودیو این تنظیمات رو انجام دادین؟!
یعنی غیر از اون مراحلی که توی Demo نشون دادین، آیا هیچ تنظیمات پیش فرضی نمی خواد؟
چون من موقع نصب، فقط طبق روال عادی نصب کردم و هیچ تنظیماتی روی کامپایلر انجام ندادم!
چرا کامپایلر من هدر فایل csp.h یا wincrypt.h رو نمی شناخت و از داخل کدهای اونها ارور می گرفت؟
فکر میکنم فهمیدم مشکل از کجاست، اینقدر چیز های عجیب قریب روی سیستممون ریختیم که اصلا حواسم به این نبود که من
قبلا Platform SDK ای هم نصب کردم. الان که برسی کردم مسیرهای این SDK به طور خودکار در این کامپایلر هم تنظیم شده
که وقتی من اون تنظیمات رو پاک کردم با اون 102 ارروری که گفته بودین روبرو شدم.
خوب برای حلش یا باید PSDK جدید رو از سایت ماکروساخت دانلود کنید که حجم بالایی هم داره یا همون ویژوال استودیو 2008 رو نصب کنید
شاد باشید
bahareh655
17-01-2009, 11:18
سلام
بی نهایت تشکر بابت کمکتون!
می خواستم ببینم اون فایل PSDK رو باید از سایت زیر دانلود کنم:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
یا از:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
تو آدرس اول سه تا فایل 1.3 مگی بود،که من سه تاشم دانلود کردم(البته فکر کنم x86 به درد من می خوره) به این صورت:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
تو آدرس دوم هم حجم فایل حدود 340 مگه!
به نظرتون کدوم یکی رو باید دانلود کنم؟
اگه ممکنه یه توضیح کلی هم درمورد Platform SDK بفرمایید، چون من اصلا نمی دونم چیه و به چه دردی می خوره؟
باز هم ممنون به خاطر زحماتتون:20:
سلام
اون فایل 1.3 مگی اگه اشتباه نکنم موقع نصب بصورت اینترنتی این بسته رو دانلود و نصب میکنه یعنی همون 340 مگ در نهایت دانلود میشه
به نظرم همون لینک دوم بهتر باشه
اگه ممکنه یه توضیح کلی هم درمورد Platform SDK بفرمایید، چون من اصلا نمی دونم چیه و به چه دردی می خوره؟
این بسته شامل آخرین هدر فایل ها، کتابانه ها و ابزارهای مورد نیاز برای کامپایل برنامه با ++Visual C هست، این بسته
همراه کامپایلر های جدید ماکروسافت ریخته میشه ولی افرادی که از کامپایلر های قدیمی تر استفاده میکنند میتونید این بسته رو جدا دریافت کنند
تا بتونن از آخرین امکانات و احتمالا توابع API ای که به سیستم عامل اضافه شده بهره مند بشن.
شاد باشید
bahareh655
18-01-2009, 23:15
سلام
ببخشید من می خواستم یه سری کد آماده به کدهای پیش فرض csp.dll اضافه کنم(از جمله رمزنگاری و ...)
می خواستم ببینم فرق دو تا واژه sample code و opensource چیه؟
چون من که می خوام یه سری الگوریتم آماده به اون dll اضافه کنم،باید کدی که اضافه می کنم،opensource باشه تا بتونه با ویندوز ارتباط برقرار کنه نه sample code !
ممنون:20:
سلام
خوب این دو واژه زمین تا آسمون با هم فرق دارن
sample code که نیاز به توضیح نداره و همینجوری هم مشخصه ، که معنیش نمونه کده مثل کدهایی که همراه بسته csp بود و نمونه هایی از این قبیل
ولی Open Source یه جور فرهنگه که یه شرکت میاد سورس محصول نرم افزاریشو بصورت مجانی قرار میده تا هر کسی بتونه
از این سورس کدها استفاده کنه که خود این امر باعث بهبود و احتمالا رفع سریعتر مشکلات اون محصول میشه و ..
حالا همین ویندوز رو در نظر بگیرین که اصلا Open source نیست و در واقع نقطه مخالف Open source هست در واقع تمام محصولاتی
که من از شرکت ماکروسافت دیده همین طور بودن و ...
نمیدونم شایدم منظور شما از open source چیز دیگه ای بوده اگر ممکنه بیشتر توضیح بدین
شاد باشید
bahareh655
19-01-2009, 22:46
سلام ممنون
راستش من یه سری sample code از الگوریتم RSA (یه الگوریتم رمزنگاری) و SHA1 (یه اگوریتم Hash ) به زبان ++C پیدا کردم و می خواستم از کدهای اونها در csp.dll استفاده کنم ولی چون csp.dll باید یه کاربرد ویندوزی باشه و با اون (ویندوز) ارتباط برقرار کنه و تمام پیچیدگیهاشم در نظر بگیره، باید از opensource استفاده کنم که به نوعی اون پیچیدگی های ویندوز هم توش لحاظ شده باشه!
راستش تو دو تا سایت "Sourceforge.net " و "koders.com " گشتم، یعنی میزدم: "RSA in ++C opensource "
ولی نتایجی که می آورد، دقیقا مربوط به عین این عبارت نبود!
فکر کنم sample code باشن!
البته دیشب گرفتم و هنوز کدهاشونو نخوندم؛
راستی یه سوال دیگه!
شما تا حالا از کتابخونه crypt32.dll (که در پوشه ی windows/system32 موجوده)، تو برنامه ای استفاده کردین؟
یعنی یه App که این کتابخونه رو صدا بزنه و از توابعش برای رمزنگاری استفاده کنه (مثل همین csp که باید اونو call کنه و از توابعش استفاده کنه!)
تا حالا همچین کاری کردین؟
البته چون یه کم پیچیدگی های ویندوز ممکنه اذیتم کنه، می خوام از ++crypto به جای crypt32.dll استفاده کنم که سورسش و هدرش تو سایت koders هست، شما تا حالا با ++crypto کار کردین؟( به صورت یه dll در می یاد و میشه اونو تو برنامه call کرد!)
چون من تجربه قبلی در این زمینه ندارم اینقدر سوال می پرسم و نیاز به کدهای آماده دارم، باید ببخشید.
ممنون میشم راهنماییم کنید
bahareh655
20-01-2009, 23:38
سلام
واقعا ببخشید که برای بار هزارم می پرسم ، دیگه نمی دونم چی کار باید بکنم!
من ویژوال استودیو 2008 رو نصب کردم و می خوام نمونه کد csp رو توش کامپایل کنم؛
اول یه پروژه dll درست کردم و فایل های لازم رو توش add کردم، از طرفی دو تا هدر فایل موجود در پوشه sdkinc رو از طریق tools/options به include های برنامه هم اضافه کردم و دو تا فایل:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
رو هم به linker اضافه کردم و در دو حالت debug و release هم کامپایل کردم :
در حالت release بدون ارور و وارنینگ کامپایل شد و
در حالت debug فقط یه وارنینگ داد
حالا تو پوشه های release و debug فقط فایل csp.dll وجود داره و فایل csp.lib تو هیچ کدوم تولید نشد!
به نظرتون اشکال کار کجاست؟
اگه ممکنه مراحل کامپایل در ویژوال استودیو 2008 رو هم مثل اون دمویی که تهیه فرمودین، به صورت تیتروار بفرمایین!
واقعا هیچ کس رو ندارم که کمکم کنه، ممنون میشم که بفرمایید چرا فایل های lib تولید نشدند؟
با تشکر
سلام
راستی یه سوال دیگه!
شما تا حالا از کتابخونه crypt32.dll (که در پوشه ی windows/system32 موجوده)، تو برنامه ای استفاده کردین؟
یعنی یه App که این کتابخونه رو صدا بزنه و از توابعش برای رمزنگاری استفاده کنه (مثل همین csp که باید اونو call کنه و از توابعش استفاده کنه!)
تا حالا همچین کاری کردین؟
البته چون یه کم پیچیدگی های ویندوز ممکنه اذیتم کنه، می خوام از ++crypto به جای crypt32.dll استفاده کنم که سورسش و هدرش تو سایت koders هست، شما تا حالا با ++crypto کار کردین؟( به صورت یه dll در می یاد و میشه اونو تو برنامه call کرد!)
خیر استفاده نکردم، در این مورد کتابخانه و سورس زیاد هست و من همه رو تست نکردم و راستش تا این اندازه که شما الان احتیاج دارین سمت اینا نرفتم
در مورد ++crypto هم چند روز پیش مقاله ای در codeproject دیدم که کار با این کتابخانه رو با ورژن های مختلف ++Visual C نشون داده
ببینیدش شاید بتونه کمکتون کنه
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
سلام
واقعا ببخشید که برای بار هزارم می پرسم ، دیگه نمی دونم چی کار باید بکنم!
من ویژوال استودیو 2008 رو نصب کردم و می خوام نمونه کد csp رو توش کامپایل کنم؛
اول یه پروژه dll درست کردم و فایل های لازم رو توش add کردم، از طرفی دو تا هدر فایل موجود در پوشه sdkinc رو از طریق tools/options به include های برنامه هم اضافه کردم و دو تا فایل:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
رو هم به linker اضافه کردم و در دو حالت debug و release هم کامپایل کردم :
در حالت release بدون ارور و وارنینگ کامپایل شد و
در حالت debug فقط یه وارنینگ داد
حالا تو پوشه های release و debug فقط فایل csp.dll وجود داره و فایل csp.lib تو هیچ کدوم تولید نشد!
به نظرتون اشکال کار کجاست؟
اگه ممکنه مراحل کامپایل در ویژوال استودیو 2008 رو هم مثل اون دمویی که تهیه فرمودین، به صورت تیتروار بفرمایین!
واقعا هیچ کس رو ندارم که کمکم کنه، ممنون میشم که بفرمایید چرا فایل های lib تولید نشدند؟
با تشکر
خوب الان که برسی کردم به نظر میاد تو این ورژن فایل csp.def رو باید خودتون به تنظیمات اضافه کنید
اون وارنینگ ها هم زیاد مهم نیستن با اوناهم فایل شما به درستی کامپایل میشه
طبق این عکس عمل کنید تا فایل csp.def به تنظیمات اضافه شود
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
شاد باشید
bahareh655
22-01-2009, 11:38
سلام
من اون کاری که شما فرمودین، انجام دادم؛
یه بار در حالت debug طبق شکل زیر:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
و این ارور و وارنینگ رو در یافت کردم:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و یک بار هم در حالت release ، طبق شکل زیر:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
و این ارور و وارنینگ رو دریافت کردم:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
به نظرتون چرا فایل csp.def رو نمی تونه باز کنه و فایل CustomCSP.lib رو تولید کنه؟
ممنون
سلام
مطمعن بشین csp.def کنار دیگر فایل های اون بسته مثل csp.c و ... قرار داشته باشه
راستش چیزی به ذهنم نمیرسه، نمیدونم چرا براتون جواب نمیده
شاد باشید
bahareh655
22-01-2009, 23:44
سلام
ببخشید یه سوال در مورد یه تابع ویندوزی داشتم؛
توی همون نمونه کد csp ، یه تابعی هست بنام "CPAcquireContext " که ساختارش به این شکله:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
متغیر چهارمش یه اشاره گر به یک ساختار هستش، یعنی "PVTableProvStruc " اشاره گری به ساختار "VTableProvStruc " هستش که تعریفش به شکل زیره:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حالا متغیر سوم این ساختمان یعنی "FuncReturnhWnd " به این صورت تعریف میشه:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
که csp اونو برای گرفتن یه دستگیره ی پنجره ای که باید از اون به عنوان پدر(parent ) یا مالک (owner ) هر UI ای که نمایش داده میشه، استفاده کنه، بکار می گیره.
متغیر phWnd در این تابع، آدرس یک متغیر "HWND " هست که دستگیره پنجره پدر رو دریافت می کنه!
حالا سوالم اینجاست که آیا مثالی از بکارگیری این متغیر وجود داره؟
یعنی می خواستم ببینم آیا یه کد نمونه ای از طرز استفاده از این متغیر هست و آدرس یه متغیر "HWND " چه جوری باید باشه و آیا در خروجی، واقعا یه پنجره نشون میده؟
با تشکر
bahareh655
25-01-2009, 19:05
سلام
من توی msdn ، مثالی پیدا کردم که یه نمونه کد هستش که از HWND استفاده می کنه و به طور کلی، یه برنامه ی ویندوزی هست که کدش به صورت زیره:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
وقتی که من این کد رو در ویژوال استودیو 2008 کامپایل می کنم، این ارور رو میده:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
میشه خواهش کنم بفرمایید چه طوری باید این ارور رو رفع کنم؟
ممنون
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.