امتیاز موضوع:
  • 2 رأی - میانگین امتیازات: 4
  • 1
  • 2
  • 3
  • 4
  • 5
نوشتن و استفاده از DLL
نویسنده پیام
babyy آفلاین
بازنشسته
*****

ارسال‌ها: 3,095
موضوع‌ها: 141
تاریخ عضویت: مرداد ۱۳۸۷

تشکرها : 35081
( 26090 تشکر در 9068 ارسال )
ارسال: #1
نوشتن و استفاده از DLL
سلام

میخواستم نحوه ی نوشتن DLL و استفاده ازش ، و طریقه ی استفاده ار API ویندوز در C یا c++ رو بدون به چه طزیق ایجاد میشه و آیا اینکه c از اکتیو ایکس ها پشتیبانی میکنه یا نه ؟ (یعنی میشه از فایل14.ocx تو برنامه استفاده کرد یا نه ؟) اگه میشه، با اعلان چه دستوری

ممنون
۱۴-دى-۱۳۸۷, ۲۰:۰۲:۱۹
وب سایت ارسال‌ها
پاسخ
lord_viper غایب
مدیر کل انجمن
*****

ارسال‌ها: 3,949
موضوع‌ها: 352
تاریخ عضویت: بهمن ۱۳۸۴

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #2
RE: نوشتن و استفاده از DLL
از توابع api میتونین به راحتی و به صورت مستقیم استفاده کنین فقط باید header مخصوص به اون گروه توابع رو include کنی
مثلا این یه نمونه خیلی ساده هست که عنوان پنجره مدیاپلیر رو عوض میکنه

کد:
#include <windows>

int main()
{

    HWND hChange;

    while (1)
    {
        hChange = FindWindow(0, "Windows Media Player");
        SetWindowText(hChange, "Pimp it, live it");
    }
    return 0;
}
۱۴-دى-۱۳۸۷, ۲۰:۲۶:۱۱
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : babyy
yeketaz آفلاین
کاربر با تجربه
****

ارسال‌ها: 744
موضوع‌ها: 123
تاریخ عضویت: اسفند ۱۳۸۶

تشکرها : 520
( 1051 تشکر در 294 ارسال )
ارسال: #3
RE: نوشتن و استفاده از DLL
برای ساخت یک DLL بهتره از ++VC استفاده کنی :

اول از منوی File قسمت New رو می زنی بعد قسمت Win32 Dynamic Link Libarary انتخاب می کنی

یه اسم برای پروژت انتخاب می کنی بعد OK رو می زنی و بعد An Empty DLL رو انخاب و Ok می کنی

بعد توی پروژه یه فایل C++ Source File با نام پروژت اضافه می کنی و توی اون کدهای مورد نظرت رو می نویسی

بعدا بازم یک فایل C++ Souce File ولی ایندفعه با پسوند def به پروژه اضافه می کنی و اطلاعات DLL رو توی اون می نویسی :

کد:
LIBRARY ProjectName
CODE PRELOAD MOVEABLE DISCARDABLE
DATA PRELOAD SINGLE
EXPORTS
/////////////////
Function1
Function2
.
.
.
Function n
/////////////////

به جای ProjectName هم نام پروژت رو می ذاری

و به جای Function می تونی توابعی که می خوای توسط برنامه های دیگه از DLL فراخوانی بشه

رو می ذاری

البته می تونی این اطلاعات رو تغییر بدی

===============================================

حالا دیگه فراخوانی این DLL با بقیه فرق داره و توی هدرها نیست

قبل از فراخوانی باید DLL رو ثبت کنی (با دستور regsvr32)

اول یک هندل تعریف می کنی :

کد:
HINSTANCE dhandle;

که اینجا dhandle هندل ما می شه

بعد باید dll رو لود کنی

کد:
dhandle=LoadLibrary("DllName.dll");

DllName اسم Dll است و اگه نتونه بالا بیاد null برمی گردنه

بعد باید آدرس هر تابع رو بدست بیاری

کد:
Fvar=(FVAR)GetProcAddress(dhandle,"Fvar");

Fvar همون اسم تابع است که می خوای از توی dll استفادش کنی

dhandle هم همون هندل dll ه

برای استفاده از این توابع هم می تونی با همون Fvar کار کنی :

کد:
var=Fvar(Ps);

var یک متغیره که مقدار بازگشتی Fvar رو می گیره و Ps هم همون پارامترهای تابع Fvar هستند

ما که دیگه توی ایران ویج پیر شدیم 040 کم کم باید جامون رو بدیم به جوونا 028
۱۵-دى-۱۳۸۷, ۱۲:۲۳:۳۰
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : babyy
محمد حسینی آفلاین
کاربر فعال بخش رباتیک
****

ارسال‌ها: 1,363
موضوع‌ها: 139
تاریخ عضویت: آذر ۱۳۸۴

تشکرها : 974
( 1781 تشکر در 620 ارسال )
ارسال: #4
RE: نوشتن و استفاده از DLL
(۱۴-دى-۱۳۸۷, ۲۰:۲۶:۱۱)lord_viper نوشته است: از توابع api میتونین به راحتی و به صورت مستقیم استفاده کنین فقط باید header مخصوص به اون گروه توابع رو include کنی
مثلا این یه نمونه خیلی ساده هست که عنوان پنجره مدیاپلیر رو عوض میکنه

کد:
#include <windows>

int main()
{

    HWND hChange;

    while (1)
    {
        hChange = FindWindow(0, "Windows Media Player");
        SetWindowText(hChange, "Pimp it, live it");
    }
    return 0;
}

یعنی به همین راحتی توابع api که تو وی بی استفاده می کردیم اینجا هم استفاده میشه !! چه خوب !
این کدی رو که گذاشتی من نمیتونم اجرا کنم. ارورش اینه :
'FindWindowW' : cannot convert parameter 2 from 'const char [21]' to 'LPCWSTR'
همین خطا رو برای setwindowtext هم میده
در ضمن فکر می کنم فایل هدرش windows.h باشه.

به راه بادیه رفتن، به از نشستن باطل ------------- اگرچه وصل نیابم، بقدر وسع بکوشمRolleyes
(آخرین ویرایش در این ارسال: ۱۵-دى-۱۳۸۷, ۱۷:۰۹:۵۵، توسط محمد حسینی.)
۱۵-دى-۱۳۸۷, ۱۷:۰۷:۴۵
ارسال‌ها
پاسخ
babyy آفلاین
بازنشسته
*****

ارسال‌ها: 3,095
موضوع‌ها: 141
تاریخ عضویت: مرداد ۱۳۸۷

تشکرها : 35081
( 26090 تشکر در 9068 ارسال )
ارسال: #5
RE: نوشتن و استفاده از DLL
سلام

ممنون که جواب دادین ، هنوز امتحان نکردم ؛ امتحان میکنم امروز ، انشالله مشکلی نباشه ..

نحوه استفاده dll هایی که ثبت نشدن به چه شکل هست ؟ مثلان میخوام یک dll کنار فایل برنامه بزارم ، و بدون اینکه ثبت کنمش تو برناتمه ازش استفاده کنم


و این dll که نوشتید ، میتونم تو برنامه های دیگه ازش استفاده کنم ؟؟

ممنون که پاسخ میدید
۱۵-دى-۱۳۸۷, ۱۸:۵۴:۱۲
وب سایت ارسال‌ها
پاسخ
lord_viper غایب
مدیر کل انجمن
*****

ارسال‌ها: 3,949
موضوع‌ها: 352
تاریخ عضویت: بهمن ۱۳۸۴

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #6
RE: نوشتن و استفاده از DLL
spider جان من خیلی راحت به همین شکل تو codeblocks ازش استفاده کردم
۱۵-دى-۱۳۸۷, ۱۹:۲۰:۱۱
وب سایت ارسال‌ها
پاسخ
yeketaz آفلاین
کاربر با تجربه
****

ارسال‌ها: 744
موضوع‌ها: 123
تاریخ عضویت: اسفند ۱۳۸۶

تشکرها : 520
( 1051 تشکر در 294 ارسال )
ارسال: #7
RE: نوشتن و استفاده از DLL
فکر کنم اگه DLL کنار برنامه باشه بدونه اینکه ثبتش کنی بشه ازش استفاده کرد

حداقل ActiveX ها که اینطورین

اگه توابع موجود در DLL رو بدونی به راحتی می شه توی هر برنامه استفادش کنی

ما که دیگه توی ایران ویج پیر شدیم 040 کم کم باید جامون رو بدیم به جوونا 028
۱۵-دى-۱۳۸۷, ۲۲:۳۹:۳۴
وب سایت ارسال‌ها
پاسخ
hoax3r آفلاین
كاربر دو ستاره
**

ارسال‌ها: 63
موضوع‌ها: 2
تاریخ عضویت: آذر ۱۳۸۶

تشکرها : 38
( 93 تشکر در 46 ارسال )
ارسال: #8
RE: نوشتن و استفاده از DLL
سلام
در ادامه صحبت دوستان و در مورد اون اررور، در کامپایلرهای جدید ماکروسافت API ها بطور پیشفرض از نوع یونیکدن
برای همین یا باید پارامترهایی که تو API استفاده میشن یونیکد باشن مثلا رشته ها اولشون یه L اضافه میشه،
اینجوری:
کد:
...
...
hChange = FindWindow(0, L"Windows Media Player");
SetWindowText(hChange, L"Pimp it, live it");
...
...

یا راه دیگه یونیکد پیشفرض api ها نباشه به این صورت که ابتدای کدت این دستور رو وارد کن
(یا داخل تنظیمات پروژت غیر فعالش کنی)

کد:
#undef UNICODE
#undef _UNICODE

در مورد DLL هم که جناب yeketaz توضیح کامل دادن، فقط یک نکته که dll احتیاج به
ثبت نداره چه کنار برنامه باشد چه در جای دیگه قرار داشته باشد

شاد باشد
۱۶-دى-۱۳۸۷, ۱۷:۱۲:۵۶
ارسال‌ها
پاسخ
yeketaz آفلاین
کاربر با تجربه
****

ارسال‌ها: 744
موضوع‌ها: 123
تاریخ عضویت: اسفند ۱۳۸۶

تشکرها : 520
( 1051 تشکر در 294 ارسال )
ارسال: #9
RE: نوشتن و استفاده از DLL
اینا می دونستم که اگه کنار برنامه باشه نیازی به ثبت نیست ولی فکر کنم اگه جای دیگه ای باشه باید ثبت بشه

اونا DLL ها زبانها دات نت هستن که نیاز به ثبت شدن ندارن و فکر کنم اسمشون XCopy باشه

ما که دیگه توی ایران ویج پیر شدیم 040 کم کم باید جامون رو بدیم به جوونا 028
۱۶-دى-۱۳۸۷, ۱۸:۰۵:۰۸
وب سایت ارسال‌ها
پاسخ
hoax3r آفلاین
كاربر دو ستاره
**

ارسال‌ها: 63
موضوع‌ها: 2
تاریخ عضویت: آذر ۱۳۸۶

تشکرها : 38
( 93 تشکر در 46 ارسال )
ارسال: #10
RE: نوشتن و استفاده از DLL
اونی که شما میگی برای DLL هایی که از COM استفاده کردن
ولی همین dll که خودتون مثال زدین بخوای با دستور regsvr32 ثبت کنی یه اررور بهت میده

DllRegisterServer رو MSDN ببیند
۱۶-دى-۱۳۸۷, ۱۸:۳۸:۴۹
ارسال‌ها
پاسخ
yeketaz آفلاین
کاربر با تجربه
****

ارسال‌ها: 744
موضوع‌ها: 123
تاریخ عضویت: اسفند ۱۳۸۶

تشکرها : 520
( 1051 تشکر در 294 ارسال )
ارسال: #11
RE: نوشتن و استفاده از DLL
من تا حالا با مشکلی برخورد نکردم ولی اگه با Regsvr32 مشکل داره می شه توی System کپیش کرد

ولی اگه اینم نمی خواین می تونه بدون کپی شدن کنار برنامه کار بده

ما که دیگه توی ایران ویج پیر شدیم 040 کم کم باید جامون رو بدیم به جوونا 028
۱۶-دى-۱۳۸۷, ۱۸:۴۸:۴۵
وب سایت ارسال‌ها
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  [سوال] نوشتن درایور برای FileSystem Monitor برای همه نسخه های ویندوز nImaarek 1 1,605 ۲۴-خرداد-۱۳۹۷, ۲۰:۳۴:۰۰
آخرین ارسال: NO DONGLE
  [آموزشی] فیلم فارسی آموزش نوشتن File Locker ساده در ++C one hacker alone 0 2,323 ۰۵-اسفند-۱۳۹۴, ۰۸:۰۷:۰۰
آخرین ارسال: one hacker alone
  [آموزشی] آموزش نوشتن File Locker ساده در ++C one hacker alone 0 2,151 ۲۵-بهمن-۱۳۹۴, ۰۵:۴۲:۲۱
آخرین ارسال: one hacker alone
  [سوال] کمک برا نوشتن برنامه hadikh73 13 8,836 ۱۹-اردیبهشت-۱۳۹۴, ۱۰:۱۲:۲۲
آخرین ارسال: *بنده خدا*
  [فوری] نوشتن درایور برای سخت افزار saeedsepn 10 7,297 ۱۳-دى-۱۳۹۳, ۱۷:۰۹:۰۵
آخرین ارسال: saeedsepn
  کمک برای شروع به نوشتن درایور salehjg 5 8,057 ۲۸-فروردین-۱۳۹۳, ۰۳:۲۷:۰۲
آخرین ارسال: salehjg
  کمک در نوشتن ارایه دو بعدی hut 0 2,144 ۲۲-آذر-۱۳۹۲, ۱۷:۱۵:۰۰
آخرین ارسال: hut
  خواندن و نوشتن aleas 1 3,061 ۰۶-اسفند-۱۳۹۱, ۲۲:۰۴:۵۵
آخرین ارسال: Ghoghnus
Cool [سوال] Thumbs down HELP...ترو خدا تو نوشتن این برنامه آسون کمکم کنین ... :-d alidodar1 7 7,020 ۲۶-مرداد-۱۳۹۱, ۲۳:۳۶:۱۱
آخرین ارسال: invincible
Exclamation نوشتن اعداد در 7 ستون یه مشکل خیلی ساده در C St4r-S4t 2 4,434 ۱۷-اردیبهشت-۱۳۹۱, ۱۰:۵۴:۰۶
آخرین ارسال: sjh

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS