PDA

View Full Version : DLL



MSJazayeri
جمعه 28 تیر 1387, 18:46 عصر
چطوری میشه از توابع یک DLL استفاده کرد؟
مثلا یک DLL به نام mydl.dll داریم که تابع test در اون قرار داره.حالا اگه بخوایم از این تابع استفاده کنیم (DLL , exe در یک دایرکتوری اند)

Nima_NF
جمعه 28 تیر 1387, 22:41 عصر
اگر فایل .Lib هم همراه آن هست آن را در تنظیمات کامپایلر به linker اضافه کنید و هدر فایل .h آن را هم به بالای کدها اضافه کنید و از توابع درون dll استفاده کنید.

در غیر این صورت اگر فقط فایل dll را دارید باید از LoadLibrary و GetProcAddress استفاده کنید.

در لینک های زیر به طور کامل توضیح داده شده است:
چگونگی فراخوانی تابعهای دورن یک DLL (http://barnamenevis.org/forum/%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%A8%D8%A7-c-cpp/87235-%DA%86%DA%AF%D9%88%D9%86%DA%AF%DB%8C-%D9%81%D8%B1%D8%A7%D8%AE%D9%88%D8%A7%D9%86%DB%8C-%D8%AA%D8%A7%D8%A8%D8%B9%D9%87%D8%A7%DB%8C-%D8%AF%D9%88%D8%B1%D9%86-%DB%8C%DA%A9-dll.html#post435584)
وارد کردن dll در ویژوال 2005 (http://barnamenevis.org/forum/%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%A8%D8%A7-%D9%88%DB%8C%DA%98%D9%88%D8%A7%D9%84-%D8%B3%DB%8C-%D9%88-mfc/91441-%D9%88%D8%A7%D8%B1%D8%AF-%DA%A9%D8%B1%D8%AF%D9%86-dll-%D8%AF%D8%B1-%D9%88%DB%8C%DA%98%D9%88%D8%A7%D9%84-2005-a.html)

موفق باشید

MSJazayeri
شنبه 29 تیر 1387, 00:28 صبح
بعد یک سوال دیگه توی VC++ چطوری میشه یک DLL ساخت و توش یکسری تابع قرار داد؟

Nima_NF
شنبه 29 تیر 1387, 15:01 عصر
از منوی file و سپس new یک پروژه جدید بسازید (مثلا win32 project) و در دیالوگ باز شده نوع پروژه را به dll تغییر دهید.
در فایل اصلی cpp که تابع main در آن است، در بالای آن بنویسید:



#ifdef DLL_EXPORTS
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif


وقتی می خواهید تابع ها را export کنید ابتدا ماکرو DLL_EXPORTS را تعریف کنید.

و سپس تعاریف توابع و صادر کردن آن ها به dll :




DLL_API void test (int x);

int WINAPI DllMain (HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved)
{
return TRUE ;
}

DLL_API void test (int x)
{
x++;
}

MSJazayeri
یک شنبه 30 تیر 1387, 16:02 عصر
من کار هایی رو که گفتید انجام دادم ولی وقتی Build میکنم این دوتا ارور رو میده


C:\Users\Proxima\Documents\desktop\MDLL\Debug\MDLL .dll : fatal error LNK1169: one or more multiply defined symbols found

و این:


dllmain.obj : error LNK2005: _DllMain@12 already defined in MDLL.obj

اسم Dll هم MDLL هست.
اینا رو چیکارشون کنم؟؟

Nima_NF
یک شنبه 30 تیر 1387, 19:02 عصر
اگر فایل های اضافی پروژه را حذف کنید و zip کرده و پیوست کنید بررسی می کنم تا اشکال کار پیدا شود، دقت کنید که DllMain را مجددا تعریف نکنید، در خود پروژه وجود دارد.