جلوی اون خط هم یه L گذاشتم درست شد:
این L دقیقا چی کار می کنه؟کد:wcex.lpszClassName = "Test";
Printable View
جلوی اون خط هم یه L گذاشتم درست شد:
این L دقیقا چی کار می کنه؟کد:wcex.lpszClassName = "Test";
ایکارو باید بعد اینکه اون تنظیماتی که در مورد Character Set گفتم انجام بدین. در غیر اینصورت L رو به رشته اضافه میکنیدنقل قول:
LPSTR و * char همونطور که گفتین یکی هستن. حالا چرا من به این شکل استفاده کردم بیشتر بر حسب عادت بوده دلیل خاصی نداره.
بله حق با شماست. در این حالت چون lpszClassName به صورت LPCSTR تعریف شده میشه مستقیم رشته رو وارد کردنقل قول:
L هم نشون میده رشته از نوع یونیکد هست.
منظورم این نبود که چرا به جای * char، از LPCSTR استفاده می کنید! من قبلا تو visual c++ 6 یه اسمی رو define می کردم:
بعد WinClassName رو به lpszClassName نسبت می دادم:کد:#define WinClassName "test"
یعنی اینجا به LPCSTR تبدیل نمی کردم!کد:lpszClassName = WinClassName
درست منظورتون رو از جمله آخر که گفتین "یعنی اینجا به LPCSTR تبدیل نمی کردم!" رو متوجه نشدم. چی رو تبدیل میکردین؟نقل قول:
مهم اینه که lpszClassName به صورت LPCSTR تعریف شده و شما میتونید رشته رو داخل کد به صورت مستقیم
هم اختصاص بدین حالا فرقی نداره رشته قبلا به چه شکل تعریف شده باشه.
خیلی ممنون. یه چیزی رو قاطی کرده بودم الان فهمیدم.
سلام دوستان
من تازه برنامه نویسی ویندوز با C++ رو شروع کردم!
اولشم می خوام با نوشتن یه dll نوع win32 ساده و بعد نوشتن یه Application که تابع نوشته شده تو dll رو صدا می زنه،شروع کنم!
یه نمونه کد هم پیدا کردم که یه dll ساده اس به اضافه کدهایی که اتصال پویای load-time و run-time رو پیاده سازی کردن و چند کاربرد دیگه!
اون نمونه کدها رو هم تو یه فایل notpad اینجا آپ کردم:
کد:http://www.hotshare.net/file/82455-9939950ad6.html
من برای 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
کد:#ifdef _DLL_
#define DLLAPI __declspec(dllexport)
#else
#define DLLAPI __declspec(dllimport)
#endif
DLLAPI void WINAPI ShowMsg();
dll.cpp
کد:
#include <windows.h>
#define _DLL_
#include "DLL.h"
BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpvReserve)
{
return TRUE;
}
DLLAPI void WINAPI ShowMsg()
{
MessageBox(NULL, "You are in dll", "MsG", MB_OK);
}
ما یه تابع ShowMsg ایجاد کردیم که یه پیام نشون بده، حالا برای استفاده میتوینم از توابع LoadLibrary و GetProcAddress استفاده کنیم
یا به این صورت راحتتر به این صورت در میاد
کد:
#include <windows.h>
#include "DLL.h"
#pragma comment(lib, "dll.lib")
int main()
{
ShowMsg();
return 0;
}
اون سه سوال هم تو MSDN توضیحای داده، ولی بصورت خلاصه اینجوری میشه گفت
HANDLE : برای کار با اشیاء مثلها فایهال و پروسه ها و ... احتیاج به جور حق دسترسی یا حالا هر چی بشه اسمشو گزاشت هست که بهش هندل میگن
LPTSTR : قسمت LP همون اشاره گر هست، T وقتی پروژه رو بخوان هم بصورت اسکی و یونیکد بدن از این استفاده میکنن
و STR هم که معلومه رشتس که اگه T رو در نظر نگیریم معادل این میشه
کد:char *
در مورد سوال آخر مثالهایی که MSDN داره بیشتر ترکیب C و win32 api هست.
ولی اگه ترکیب api ها با کلاسهای ++C رو بخواین این سایت رو بد نیست ببینید.
کد:http://www.relisoft.com/book/index.htm
در مورد csp هم اطلاعی ندارم
شاد باشید
سلام
ضمن عرض تشکر بابت جواب کامل به سوالاتم: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 ایجاد شد!
در ضمن موقع کامپایل کردن هم با این لینک ارورها مواجه شدم:
کد:
میشه در مورد این دو تا خطا توضیح بدین که علت بوجود اومدنشون چیه؟کد:Linking...
LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Debug/test.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
کد:#include <windows.h>
#include "DLL.h"
#pragma comment(lib, "dll.lib")
int main()
{
ShowMsg();
return 0;
وقتی که کد بالا رو هم تو یه صفحه دیگه کپی و اجرا می کنم،میگه: "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:
سلام amsjavan !
با توجه به پست های قبلی تون،شما ظاهراً برنامه نویسی ویندوزو از روی کتاب دارین دنبال می کنین!
می خواستم لطف کنین اسم اون کتابو (در مورد برنامه نویسی ویندوز با C++ )یا اگه کتاب دیگه ای سراغ دارین،معرفی کنین که تمام دستورات رو از اول و کامل توضیح داده باشه و مطالبی در مورد درایور نویسی،dll نویسی و نوشتن wrapper داشته باشه!
می دونم msdn مرجع کاملیه،ولی ترجیح می دم از روی کتاب کار کنم!
ممنون
نقل قول:من ورژن 2001 اش رو دارم،ولی هم قدیمیه و هم بعضی جاهاش درست نصب نمی شه!
ببخشید شما گفتید برای تغییر دادن کامپایلر در مورد UNICODE در نظر گرفتن رشته ها،راه اول اینه که بریم تو منوی Project و ...
راستش تو منوی Project من هم چین چیزی وجود نداره،می خواستم ببینم برای تغییر تنظیمات کامپایلر باید کار دیگه ای بکنم یا جای دیگه ای برم؟!
(من از VC++ 6 استفاده می کنم!)
ممنون میشم اگه راهنماییم کنین.
در ضمن برنامه msdn رو میشه از خود سایت مایکروسافت دانلود و نصب کرد؟!