PDA

View Full Version : dll های ساخته شده توسط Qt با زبان های برنامه نویسی دیگر سازگاری دارد؟



alireza es
یک شنبه 29 تیر 1393, 00:02 صبح
با عرض سلام دوستان
وقتی با Qt یا C++‎‎‎‎‎‎‎ استاندارد یک یا چند فایل dll میسازیم میشه اونارو در زبان های دیگه ایمپورت کرد و استفاده کرد ؟برای مثال در سی شارپ یا دلفی
برای این کار نیاز داریم چه اصولی رو رعایت کنیم؟
ممنون میشم یکم اساتید راهنماییم کنند

نکته :معذرت نمیدوستم این تایپکو تو فروم C++‎‎‎‎ استاندارد بذارم یا فروم Qt چون سوالم در مورد هردوی آنهاست اشتباهی عنوان تایپک رو هم نوشتم با Qt و زبان رو نوشتم زابن:گریه:

کامبیز اسدزاده
یک شنبه 29 تیر 1393, 10:17 صبح
با عرض سلام دوستان
وقتی با Qt یا C++‎‎‎‎‎‎‎‎ استاندارد یک یا چند فایل dll میسازیم میشه اونارو در زبان های دیگه ایمپورت کرد و استفاده کرد ؟برای مثال در سی شارپ یا دلفی
برای این کار نیاز داریم چه اصولی رو رعایت کنیم؟
ممنون میشم یکم اساتید راهنماییم کنند

نکته :معذرت نمیدوستم این تایپکو تو فروم C++‎‎‎‎‎ استاندارد بذارم یا فروم Qt چون سوالم در مورد هردوی آنهاست اشتباهی عنوان تایپک رو هم نوشتم با Qt و زبان رو نوشتم زابن:گریه:

عنوان تصحیح شد...

به این نمونه مثال هم توجه کنید شاید مفید باشه : http://stackoverflow.com/questions/8366590/how-to-create-dll-in-c-for-using-in-c-sharp

one hacker alone
دوشنبه 30 تیر 1393, 16:41 عصر
سلام اگه با c++ بنویسید مشکلی ندارید اما اگه با Qt بخواید کتابخانه بنویسید dll نهایی در پروژه های Qt حالا ویندوز یا لینوکس یا.... قابل استفاده اس نه زبان های دیگه
پس نتیجه اینکه برای استفاده در زبان های دیگه شما باید با همون c++ استاندارد کد بزنید

#target
دوشنبه 30 تیر 1393, 19:24 عصر
مگه QT فایل رو بسازه Export Table ایجاد نمبکنه . اگه کنه که هر جا میشه Import کرد توابعشو !!

eshpilen
چهارشنبه 01 مرداد 1393, 12:02 عصر
فکر کنم باید ابتدا کیوت رو با ویژوال سی++ (میکروسافت) کامپایل کنی، بعد میشه dll هاش رو در برنامه های ویژوال سی++ (و بالطبع در محیطهای دیگری مثل دات نت از طریق API هایی که داره) استفاده کرد.
موضوع اینه که نسخهء بازمتن کیوت روی ویندوز با مجموعه و کامپایلر MinGW/GCC کامپایل شده که با خروجی و استاندارد کامپایلرهای میکروسافت سازگار نیست.

eshpilen
چهارشنبه 01 مرداد 1393, 12:09 عصر
مگه QT فایل رو بسازه Export Table ایجاد نمبکنه . اگه کنه که هر جا میشه Import کرد توابعشو !!
نه تاجاییکه میدونم به این سادگی نیست.
کامپایلرهای مختلف استانداردها و روشهای مختلفی برای بعضی جزییات سطح پایین (مثل استانداردهای فراخوانی توابع در سطح پایین (http://en.wikipedia.org/wiki/Calling_convention)) دارن که با هم تفاوت میکنه و به همین خاطر نمیشه خروجی های اونا رو براحتی با هم ترکیب کرد.
شاید توی مقولهء ABI (http://en.wikipedia.org/wiki/Application_binary_interface) (درمقابل API) قرار بگیره این چیزی که میگم.

alireza es
چهارشنبه 01 مرداد 1393, 15:39 عصر
فکر کنم باید ابتدا کیوت رو با ویژوال سی++ (میکروسافت) کامپایل کنی، بعد میشه dll هاش رو در برنامه های ویژوال سی++ (و بالطبع در محیطهای دیگری مثل دات نت از طریق API هایی که داره) استفاده کرد.
موضوع اینه که نسخهء بازمتن کیوت روی ویندوز با مجموعه و کامپایلر MinGW/GCC کامپایل شده که با خروجی و استاندارد کامپایلرهای میکروسافت سازگار نیست.
من از ide کیوت کریتور تو لینوکس استفاده میکنم و تو ویندوز از پلاگین ویژوال استادیو .
یعنی این پلاگین و نسخه msvc توسط کامپایلر MinGw کامپیال شده؟؟
همچنین من اگه با کیوتی یه فایل dll بسازم (با هر کامپایلری)میشه توی زبان هایی که کلا از یه خانواده دیگه هستن مثل دلفی و پایتون(مخصوصا دلفی) استفاده کنم؟؟

rahnema1
چهارشنبه 01 مرداد 1393, 18:22 عصر
من از ide کیوت کریتور تو لینوکس استفاده میکنم و تو ویندوز از پلاگین ویژوال استادیو .
یعنی این پلاگین و نسخه msvc توسط کامپایلر MinGw کامپیال شده؟؟
همچنین من اگه با کیوتی یه فایل dll بسازم (با هر کامپایلری)میشه توی زبان هایی که کلا از یه خانواده دیگه هستن مثل دلفی و پایتون(مخصوصا دلفی) استفاده کنم؟؟

تمام dll هایی که جهت استفاده در سیستم عامل ویندوز درست میشن باید از فرمت Microsoft Portable Executable باشند که استاندارد آن را مایکروسافت تعیین می کنه
چون می خواهید از زبان سی پلاس پلاس استفاده کنید در dll هایی که توسط اون درست میشه با استفاده extern "C و "++extern"C تابعها و متغیرها را فرستاد.
اما یک نکته وجود داره اگه از "++extern"C استفاده کنید نامهای فرستاده شده در dll به صورت عجق وجق در میاد اما extern c اینجور نمیشه
نکته دیگه اینکه جهت مثلا استفاده از یک تابع موجود در dll لازمه که پارامترها و نوع مقدار برگشتی تابع را بدونید
win32 api تابع LoadLibrary را گذاشته که بشه با اون یک dll را استفاده کرد در این صورت نامهایی که به صورت عجق وجق هستند دقیقا به همون صورت باید در برنامه استفاده بشن
این هم لیست تعدادی از نامهای موجود در QtCore4.dll
http://www.sharefile.ir/uploads/1406199598.gif