PDA

View Full Version : نحوه ساخت dll در c++



milad_d993
چهارشنبه 17 اردیبهشت 1393, 19:42 عصر
سلام دوستان
میشه یه مثال بزنین؟؟؟ مثلا توی dll تابع مشخص کردن زوج و فرد پارامتر ورودی باشه.
ممنون

rahnema1
پنج شنبه 18 اردیبهشت 1393, 08:13 صبح
سلام
دو تا فایل داریم یکی فایل zoj.cpp که سورس dll هست و یکی هم فایل main.cpp که سورس برنامه اصلی هست
و می خواهیم دو تا فایل به نام zoj.dll و main.exe را درست کنیم

//zoj.cpp
extern "C++" int zoj(int adad)
{
if(adad %2==0)
return 1;
else
return 0;
}


//main.cpp
#include <iostream>
using namespace std;

extern "C++" int zoj(int);
int main()
{
cout<< zoj(4);
}

اگه از کامپایلر ++g استفاده می کنید این دستورها را وارد کنید به ترتیب برای ایجاد dll و main
g++ -shared -o zoj.dll zoj.cpp
g++ -o main.exe main.cpp -L./ -lzoj
همچنین میشه به جای" ++extern "C از" extern "C استفاده کرد که از جمله باعث میشه نام تابع ها در dll ایجاد شده دقیقا همون نام موجود در سورس باشه و کلمات عجق وجق بهش اضافه نشه

milad_d993
جمعه 19 اردیبهشت 1393, 18:12 عصر
آقا ممنون از پاسخت

این پیغام رو نشون میده وقتی میخوام تابع main رو کامپایل و اجرا کنم:
undefined reference to `zoj'
فایل dll رو ساختم و کنار پروژه main هم کپی کردم
میشه اینا رو تو یه فایل زیپ ضمیمه کنی؟؟؟؟
ممنون

rahnema1
جمعه 19 اردیبهشت 1393, 18:29 عصر
http://uplod.ir/wi9cd5dmzi8n/zoj.zip.htm

milad_d993
جمعه 19 اردیبهشت 1393, 19:33 عصر
D:\zoj>g++ -shared -o zoj.dll zoj.cpp
g++: unrecognized option `-shared'
C:\cygnus\cygwin-b20\H-i586-cygwin32\bin\..\lib\gcc-lib\i586-cygwin32\egcs-2.91.
57\..\..\..\..\i586-cygwin32\lib/libcygwin.a(libcmain.o): In function `main':
/home/noer/src/b20/comp-tools/devo/winsup/libcmain.cc:38: undefined reference to
`WinMain@16'
collect2: ld returned 1 exit status

D:\zoj>


فایل exe و dll رو پاک کردم بعد دستور رو زدم

بعد فایل dll رو برگردوندم و دستور دوم رو زدم و این خطا رو داد:


D:\zoj>g++ -o main.exe main.cpp -L./ -lzoj
/cygnus/cygwin-b20/H-i586-cygwin32/i586-cygwin32/bin/ld: cannot open -lzoj: No s
uch file or directory
collect2: ld returned 1 exit status

D:\zoj>

rahnema1
جمعه 19 اردیبهشت 1393, 19:55 عصر
فکر کنم کامپایلر شما ایراد داره
از این سایتها gcc را دانلود کنید
http://www.equation.com/servlet/equation.cmd?fa=fortran
http://tdm-gcc.tdragon.net/download


همچنین اگه می خواهید ide هم داشته باشید که می تونید codeblocks را بگیرید
http://www.codeblocks.org/downloads/26