PDA

View Full Version : ساخت لایبری(DLL)



kochol
سه شنبه 13 دی 1384, 15:06 عصر
سلام
من می خواهم یه موتور بازی با سی++ بسازم البته تجربه هم کم هست ولی دارم از اول شروع به یادگیری می کنم و یه سایتی هم برای این پروژه سورس باز زدم خوشحال می شم در تالار سایت ما به سوالات ابتدایی ما جواب بدهید.
http://irangamedev.com
خوب من می خواهم با VC 7.0(NET) این پروژه را بسازم برای این منظور باید چه نوع پروژه ای ایجاد کنم در ضمن نمی خواهم از دات نت استفاده کنم اگر IDE دیگری را پیشنهاد می کنید بفرمایید
خلاصه من می خواهم که به راحتی بشه با این موتور و کلاس های ان کار کرد
اگر هم منبعی معرفی کنید ممنون می شم

kochol
چهارشنبه 14 دی 1384, 08:24 صبح
سلام
اگر بخواهیم که لایبری ما چند پلت فورمه باشه باید چی کار کنیم منظورم اینه که اگر بخواهیم بجز ویندوز بر روی لینوکس هم اجرا بشه.

sh_roohani
چهارشنبه 14 دی 1384, 11:35 صبح
به نظر من اولین نکته اینه که از OpenGL استفاده کنین. Net. هم کار نکنین. بهترین گزینه ++C/C هست.
در ضمن جسارت نباشه جناب kochol، ولی این عنوانی که واسه موضوعتون انتخاب کردین (ساخت لایبری(DLL)) به نظرتون یه کمی به خود موضوع بی ربط نیست؟

kochol
چهارشنبه 14 دی 1384, 19:59 عصر
سلام
به نظر من شما سوال من را اشتباه فهمیدید.
من خودم می دونم فقط اپن جی ال هست که مولتی پلت فرم هست. من گفتم کامپایلر من ویژال استادیو دات نت هست وگر نه من نمی خواهم از کدهای مدیریت شده استفاده کنم هنوزم می خواهم بدونم که چه طوری میشه یه لایبری ساخت.

kochol
پنج شنبه 15 دی 1384, 08:11 صبح
سلام
من لینکهایی می زارم و همچنین یه توضیحاتی که خودم فهمیدم تا دیگران هم استفاده کنند.

منبع: http://irangamedev.com

http://www.icynorth.com/development/createdlltutorial.html

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore98/html/_core_prepare_the_win32_dll_for_use.asp


اول مطمینا موتور ما باید یک Dll باشد که اگر این طور باشد با زبانهای VB و Delphi و یا کلا هر زبان دیگری که بتونه از لایبری ها استفاده کنه می تونه که از موتور ما هم استفاده کنه.
لطفا اگر مخلف بودید بگید.

دوم در مورد کار با موتور است که من یه چیزهایی فهمیدم برای استفاده عمومی از موتور به فایل های h. نیاز هست که اینترفیس موتور را تشکیل می دهند و دو فایل با پسوند های lib. و exp. که خود ویژال استادیو می سازه که این فایل ها فکر کنم برای برقراری ارتباط با فایل dll در ویژال استادیو هست و برای اینکه بشه با موتور توسط هر کامپایلری کار کرد باید فایلی به نام def. تعریف کنیم تا کامپایلر بتواند با فایل dll ارتباط برقرار کند و برای اجرای برنامه کامپایل شده همون فایل dll کافی هست تا اینجا حداقل برای من یه خورده کار راحتتر شد.

سوم فکر نکنم مادر کل ساخت این موتور کار به استفاده از توابع MFC بیافته پس مطالب در این زمینه را نخونید.

یک لینک هم من می زارم تا بچه ها استفادشو ببرن.

http://www.codeproject.com/dll/

sh_roohani
پنج شنبه 15 دی 1384, 08:12 صبح
سلام،
شرمنده که اشتباه متوجه شدم.
شما می تونین دو نوع DLL بسازین:

MFC-based
Win32

MFC-based ها خودشون بر دو نوع هستن:

MFC extension
Regular

در نوع MFC extension شما می تونین هم در بدنه توابع و کلاسها از MFC استفاده کنین و هم در interface اونا، ولی در نوع Regular فقط می تونین در بدنه از MFC استفاده کنین و interface اونا باید بدون MFC باقی بمونه تا پروژه های غیر MFC هم بتونن از اون DLL استفاده کنن.
در مورد Win32 هم که می تونین پشتیبانی MFC رو به پروژه تون اضافه کنین یا اضافه نکنین.
به هر صورت با توجه به چیزایی که گفتین، اگه بازم اشتباه متوجه نشده باشم، بهترین گزینه برای شما نوع Win32 هست و بدون پشتیبانی MFC تا بتونین همون کدها رو توی لینوکس هم کامپایل کنین و ازش یه Shared library بسازین.
اما روش export کردن:
برای اینکه یک کلاس رو از داخل یه DLL بتونین export کنین، باید مطابق مثال زیر عمل کنین:


class __declspec(dllexport) CMyClass
{ // Class declaration goes here};
فقط در حین استفاده از این کلاس در یک پروژه، هدر DLL رو هم به اون پروژه اضافه کنین، با این تفاوت که dllexport رو به dllimport تغییر بدین و import library مربوط به اون DLL رو هم به پروژه تون لینک کنین.
برای متغیرها، ثوابت و اشیا هم به شکل زیر عمل کنین:

__declspec(dllexport) int MyInt;
__declspec(dllexport) extern const COLORREF MyColor = RGB(50, 50, 50);
__declspec(dllexport) CRect MyRect(30, 30, 300, 300);
اما مهمتر از همه export کردن توابع:

__declspec(dllexport) int SomeFunction(int);
دیگه این چیزایی بود که الان به فکرم می رسید. اگه بعد از اینهمه تایپ کردن، بازم منظورتونو اشتباه متوجه شدم که دیگه :گریه: :گریه: :گریه: .

sh_roohani
پنج شنبه 15 دی 1384, 08:17 صبح
آخ! من مردم تا اینهمه تایپ کردم، آخرشم خودتون زودتر به نتیجه رسیدین. چیزایی که گفتین تقریبا درسته. شما ادامه بدین. اگه به مشکلی برخوردین در خدمتتون هستم.
فقط یه نکته: برای اینکه VB و Delphi هم بتونن از DLL های شما استفاده کنن، تا اونجایی که من می دونم باید بی خیال export کردن کلاسها بشین و فقط تابع export کنین، اونم به صورت

extern "C"

kochol
پنج شنبه 15 دی 1384, 18:43 عصر
سلام
من یه تست ساختم ولی حالا نمی تونم ازش استفاده کنم.

// FirstDll.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"

#define DllExport __declspec(dllexport) // It's make the program more readable

BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}

DllExport int Multiply(int ipar1, int ipar2)
{
int Result = ipar1 * ipar2;
return Result;
}

اگه می شه راهنمایی کنید
ممنون می شم.

C++Lover
جمعه 16 دی 1384, 06:20 صبح
سلام.
در مورد بازی سازی یه سری هم به http://www.persian-designers.com بزنید اونجا تا دلتون بخواد در مورد بازی سازی و موتورهای بازی و ebook ها و منابع مطلب هست البته قسمت forum اش.
موفق باشید.

C++Lover
جمعه 16 دی 1384, 06:49 صبح
در مورد dll ها هم در ebook ای به نام :


Programming Applications for Microsoft Windows, 4th Edition by Jeffry Richter

می تونید اطلاعات فوق العاده کاملی بدست بیاورید.

در مورد dll ای که خودتون ساخته اید و کدش رو گذاشتید:
ببینید اصولا دو راه برای استفاده از dll ها وجود دارد. فعلا راه ساده ترش اینه که اولا یه هدر فایل شامل prototype توابعی که export هستند داشته باشید و اون هدر فایل رو توی کدی که می خواهید توش از dll تون استفاده کنید include کنید. دوما باید به linker بگویید که در زمان لینک از فایل لایبراری (lib.) که در زمان کامپایل پروژه dll تون ایجاد شده استفاده کند. مثلا در visual studio در project settings در قسمت linker و additional dependencies نام فایل lib رو وارد کنید.
در صورت استفاده از این روش نام dll به import section فایلتون اضافه می شه و با load شدن ماژول dll هم به address space پروسس load می شه اما اگر dll پیدا نشه فایلتون هم اجرا نمیشه و پیغام خطا می ده که این dll پیدا نشد.
اما روش دوم که در آن احتیاج به استفاده از فایل lib. نیست و میتونید dll رو به صورت دستی و در زمان اجرا load کرده و در صورت نیاز استفاده کنید که توضیحش کمی طولانیه. اگر نیاز دارید بگویید تا من یا یکی از دوستان بیشتر توضیح دهیم.

موفق باشید.

seyedof
جمعه 16 دی 1384, 10:56 صبح
سلام.
در مورد بازی سازی یه سری هم به http://www.persian-designers.com بزنید اونجا تا دلتون بخواد در مورد بازی سازی و موتورهای بازی و ebook ها و منابع مطلب هست البته قسمت forum اش.
موفق باشید.

سلام
بمیرم برای اوون سایتی که گفتید. همش چرت و پرته به درد کسایی میخوره که میخوان با این ابزارهای آماده گیم سازی مثل گیم استودیو و غیره کار کنند و سطح علمی فوق العاده پایینی هم داره مخصوصا forum هاش. هر چند وقت هم یک نفر پیدا میشه یک سری خالی بنده میکنه و همه هم میفتن دنبالش :)
من سایت www.gamedev.net رو توصیه میکنم.
ممنون علی

kochol
جمعه 16 دی 1384, 16:34 عصر
سلام
آیا راهی وجود داره که بشه فهمید که الان می خواهیم لایبری را کامپایل کنیم یا می خواهیم از ان استفاده کنیم.

شاید با این بشه ولی مطمین نیستم آخه خودم از جایی دیدم.



#ifdef MYFIRSTDLL_EXPORTS


شما هم اگر اطلاعاتی در این زمینه دارید لطفا بگویید در ضمن سایت طراحان ایرانی با موتورهای اماده این کار، کار می کنند و ما می خواهیم خودمان انجین بسازیم کار آنها به قول معروف Click and play هست من امیدوارم که موفق باشند ولی من چیزی که فهمیدم این هست که علاقه به گرافیک بازی ها با ساخت انها فرق داره من از playable بودن بازی ها خوشم می یاد در صورتی که اکثر از گرافیک بازی ها خوششون می یاد.

kochol
جمعه 16 دی 1384, 19:05 عصر
سلام
این قسمت که گفتید خیلی به من کمک کرد.


دوما باید به linker بگویید که در زمان لینک از فایل لایبراری (lib.) که در زمان کامپایل پروژه dll تون ایجاد شده استفاده کند. مثلا در visual studio در project settings در قسمت linker و additional dependencies نام فایل lib رو وارد کنید.


کد پروژه را به این صورت تغییر دادم.

firstdll.h


#ifndef __FIRSTDLL_H_INCLUDED__
#define __FIRSTDLL_H_INCLUDED__

#ifdef FIRSTDLL_EXPORTS
#define DLL __declspec(dllexport)
#else
#define DLL __declspec(dllimport)
#endif

DLL int Multiply(int p1, int p2);
#endif


firstdll.cpp


#include "stdafx.h"
#include "firstdll.h"

BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}

DLL int Multiply(int p1, int p2)
{
return p1 * p2;
}


برای استفاده از این لایبری هم همونهایی که دوستمون C++Lover گفتند استفاده کردم.

در آخر هم از زحماتی که اقای روحانی در این انجمن می کشند تشکر می کنمو

kochol
جمعه 16 دی 1384, 20:16 عصر
سلام
من یه سوال دیگری داشتم ایا برای تمام تابع ها باید از __declspec(dllexport) استفاده کنم یا نه.

kochol
جمعه 16 دی 1384, 22:36 عصر
سلام
من یه مقاله ای راجع به ساخت لایبری ها در سایت قرار دادم و همین طور هم یه مقاله هم راجع به نحوه استفاده ان در سایت می گذارم تا همه استفاده کنند.

لینک مقاله
http://www.irangamedev.com/modules.php?name=Content&pa=showpage&pid=3

C++Lover
شنبه 17 دی 1384, 05:23 صبح
سلام.
نوشته شده توسط seyedof


همش چرت و پرته به درد کسایی میخوره که میخوان با این ابزارهای آماده گیم سازی مثل گیم استودیو و غیره کار کنند و سطح علمی فوق العاده پایینی هم داره مخصوصا forum هاش. هر چند وقت هم یک نفر پیدا میشه یک سری خالی بنده میکنه و همه هم میفتن دنبالش

حق با شماست.
منظور من هم بیشتر در مورد لینکهای مربوط به ebook ها و منابع بود. چون این forum به اصطلاح در مورد بازی سازی است و در قسمت ebook ها هم در این مورد توسط اعضا کلی لینک download قرار داده شده زحمت search کردن ebook رو کم می کنه. راستش من خودم در این forum عضو هستم و تا به حال فقط یک پست داشتم و آن هم درخواست یک ebook بوده.

C++Lover
شنبه 17 دی 1384, 06:14 صبح
جناب kochol عزیز:
اگر بخواهیم مسئله پرتابل بودن کد رو کنار بزاریم و از Microsoft-specific extensions ها مثل declspec_ تو کدمون استفاده کنیم، کارمون اگر فقط بخواهیم از VC استفاده کنیم، راحت تر میشود.
توضیح می دهم.
ببینید راه حل کلی این طور است که همان طور که فرمودید باید از یک داریکتیو برای تعیین زمان ساختن و یا استفاده از لایبراری در header file استفاده کرد. مثلا در کد نمونه زیر اگر MYLIB_EXPORTS تعریف شده باشد ما در حال ساختن لایبراری هستیم نه استفاده از آن بنابراین تمام کلاسها، اعضا و توابعی که باید export تعریف شوند با (declspec(dllexport__ تعریف میشوند. در ضمن در پروژه dll مان در project settings قسمت Preprocessor از قسمت ++C/C باید MYLIB_EXPORTS را وارد کنیم. حالا وقتی می خواهیم از فایل header در پروژه dll استفاده کنیم کلیه export ها اعمال می شود و در صورتی که از این فایل در جای دیگری که MYLIB_EXPORTS تعریف نشده استفاده کنیم توابع به صورت import معرفی می شوند.
در ضمن می توانیم مسئله وارد کردن فایل lib. در project settings پروژه استفاده کننده از dll را با استفاده از یکی دیگر از همان Microsoft-specific extensions ها به نام pragma comment# حل کنیم و بدون هیچ درد سری در هر جایی که می خواهیم فقط فایل header رو include کنیم. تمامی مراحل لینک، توابع export و ... به صورت خودکار انجام می شود.
البته تمامی اینها فقط در صورت حمایت کامپایلر از Microsoft-specific extensions قابل انجام میباشند.
این هم یک مثال:


// MyLib.cpp

#include "mylib.h"

BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}

// This is an example of an exported variable
MYLIB_API int ntst02=0;

// This is an example of an exported function.
MYLIB_API int fntst02(void)
{
return 42;
}

// This is the constructor of a class that has been exported.
Ctst02::Ctst02()
{
return;
}




// MyLib.h

#ifdef MYLIB_EXPORTS
#define MYLIB_API __declspec(dllexport)
#else
#pragma message ("Automatically linking with MyLib.dll")
#pragma comment(lib, "MyLib.lib")
#define MYLIB_API __declspec(dllimport)
#endif

// This class is exported from the mylib.dll
class MYLIB_API Ctst02 {
public:
Ctst02(void);
// TODO: add your methods here.
};

extern MYLIB_API int ntst02;

MYLIB_API int fntst02(void);


موفق باشید.

seyedof
یک شنبه 25 دی 1384, 07:41 صبح
سلام
dllexport در واقع میگه که این تابع میخواد export بشه و فکر کنم که در تمام کمپایلرهای تحت ویندوز باید باشه. تابعی که میخواد در dll باشه و توسط محیطهای مختلف برنامه نویسی مورد استفاده قرار بگیره باید اینطوری تعریف بشه :


extern "C" BOOL __declspec( dllexport ) WINAPI Seyedof_NewProjectFromPhoto ( HSTYLESTUDIO h , char *name )


این تابع رو از یکی از پروژه هایی که نوشتم کپی کردم که خود dll با بیلدر تولید شده بود و در محیط بیلدر و ویژوال سی و وی بی و دلفی ازش استفاده شده و مشکلی نداشته.

فکر کنم در Visual C میشه یک کلاس رو هم در dll export کرد ولی این dll فقط در خود visual studio قابل استفاده خواهد بود.
البته export کردن یک کلاس از dll راه حل داره و یک مقدار tricky است. میشه یک کلاس رو در dll قرار داد و export کرد و این dll در تمام محیطهای برنامه نویسی c++ تحت ویندوز قابل استفاده باشه. برای تولید Plugin و اینجور کارها روش بسیار خوبیه.
اگر اینطوره و میخواهید کلاس رو در dll قرار بدهید باید از قابلیتهای Polymorphism در c++ استفاده کنید و متدهای کلاستون رو به صورت virtual تعریف کنید.

ممنون علی

C++Lover
جمعه 30 دی 1384, 03:32 صبح
در مورد export کردن یک کلاس از یک dll به طوری که قابل استفاده با کامپایلرها و زبان های دیگر باشد میتوان یک interface از متدهای کلاس که همگی به صورت pure virtual هستند درست کرد سپس کلاس را در داخل dll از این interface ، مشتق نموده و سپس به پیاده سازی method های کلاس در dll پرداخت. در این صورت باید توابعی استانداردی از dll به صورت export تعریف نموده که کار ساختن یک instance از کلاس و پس دادن یک اشاره گر type cast شده آن به interface کلاس را انجام دهد. البته بهتر است که در این روش قید constructor های رنگارنگ را بزنید و فقط یک default constructor برای کلاس تعریف کنید و بیشتر اعمال initialization کلاس را به متدها واگذار کنید. در ضمن لازم است که یک متد برای destruct کردن کلاس اضافه کنید چون به خاطر محدودیتهایی قادر به استفاده از delete روی اشاره گر به interface نیستید مثلا این متد را میتوانید به این صورت تعریف کنید.


void Release()
{
delete this;
}

با استفاده از این روش می توانید امکانات versioning را هم برای کلاستان بگذارید که باعث میشود برنامه های قدیمی هم بتوانند بدون کامپایل شدن مجدد از dll های جدید استفاده کنند. یا حتی برعکس.

مثال:


// classA.h

// interfaces
class IClassA
{
virtual void release()=0;
virtual void method1()=0;
virtual void method2()=0;
};

class IClassA1 : pubic IClassA
{
virtual int method3()=0;
};

bool CreateClassA(void **ppClassA, int version=0); // export function




// ClassA.cpp
class ClassAImpl : public IClassA1
{
ClassAImpl()
{
// default constructor initialization code.
}
~ClassAImlp()
{
// clean up code...
}
virtual void release()
{
delete this;
}
virtual void method1()
{
// do some...
}
virtual void method2()
{
// do some...
}
virtual int method3()
{
// return some...
}
};

bool CreateClassA(void **ppClassA, int version=0)
{
switch (version)
{
case 0:
*ppClassA = reinterpret_cast<IClassA*>(new ClassAImpl)
return true;
case 1:
*ppClassA = reinterpret_cast<IClassA1*>(new ClassAImpl)
return true;
}
return false;
}

دقت کنید کمی شبیه به کار com object ها می باشد. البته com object ها هم تقریباً از همین روش استفاده می کنند.
(در ضمن اگر کد خطایی داره ببخشید همین الان همینجا تایپش کردم و تست هم نشده. فقط برای رساندن مفهوم به درد می خوره)

موفق باشید...

kochol
یک شنبه 16 بهمن 1384, 08:12 صبح
سلام
با تشکر از تمام دوستانی که من را راهنمایی کردن من هرچی گشتم البته کم هم بود ولی نتونستم بفهمم که "extern "C چی هست در ضمن من یه لایبری ساخته ام که می تونید کد ان را دانلود کنید و نظراتتون را به من بدهید و بگویید که ایا با این لایبری می شه در وی بی یا دلفی هم برنامه نوشت.
http://irangamedev.com/kge/kge.zip

sasan_dracula_59
یک شنبه 16 بهمن 1384, 12:43 عصر
کتاب Programing Applications for Microsoft windows (Fourth Edition به طور کامل نحوه ساخت و استفاده از فایلهای dll را از مقدماتی تا پیشرفته توضیح داده و فکر کنم در سایت www.flazx.com موجود باشد.

kochol
شنبه 20 اسفند 1384, 20:52 عصر
سلام
از تمامی دوستان که مرا راهنمایی کردند ممنونم من تقریبا یاد گرفتم که دی ال ال ها چی هستند و چه طوری می شه ساخت ولی یه سوالی که دارم اینه
من dll را با ++c ساخته ام و حالا می خواهم یه پورت براش به دات نت درست کنم طوری که یه dll تحت دات نت با dll اصلی کار کنه
هر اطلاعاتی می تونه برام مفید باشه.

kochol
یک شنبه 27 فروردین 1385, 07:30 صبح
کاش یکی پیدا میشد جواب این سوال منو می داد.
حتی لینکی منبعی چیزی هم باشه کافیه.

#<Mafia>#<C>#
یک شنبه 27 فروردین 1385, 08:07 صبح
با سلام خدمت شما دوست عزیز .
به نظر من اول اینکه بیخیال C , C++ شو .
با اینکه خودم از اون خول و چلهای C هستم ولی خوب به نظر من بهترین گزینه C#.net و DirectX هست .
دوست عزیز ما یه گروه برنامه نویس هستیم .
ما روی یه پروژه موتور سه بعدی کار میکردیم .
با C#.net .
البته اون موقع DirectX تسلط نداشتیم .
ببین دوست عزیز از من به تو نصیحت .
OpenGL عمرا DirectX نمیشه .
شما خودت ببین این شرکت Electronic Art هر ساله بالغ بر 600 بازی میسازه .
اونم با DirectX .
که هر ساله بازیهای این استودیو اول میشن .
به این پروژه منطقی نگاه کن .
من خودم با سازنده Doom3 چت کردم .
یارو 20 ساله OPENGL کار میکنه .
34 سالش بود .
اسمش یادم رفت .
ولی C را فول بود .
OpenGL خدا بود .
اول این که یه زبان به نظر من مسلط شو .
به نظر من C#.net .
بعد برو DirectX .
چون ضرر که نمیکنی هیچی .سود هم میبری .
کار من امنیت شبکه و برنامه نویسی شبکه هست .
ولی برای Game ها با Maya آبجکت طراحی میکنم .
کلا برای Game انیمیشن سازی میکنم برا تفریح .

kochol
یک شنبه 27 فروردین 1385, 17:01 عصر
سلام
من قبلا با دات نت یه انجین کوچولو ساخته ام البته نمی شه اسمشو انجین گذاشت ولی خوب کلا همه این هایی که گفتی رو فول هستم و نمی خوام در این باره باهات بحث کنم.

MMMYousefMMM
دوشنبه 28 فروردین 1385, 08:20 صبح
به اطلاع برسونم که برنامه نوشته شده در.NET قابل استفاده در لینوکس نیز می باشد. کلا حرفی برای سی پلاس دات نت نیست. عشق بر مایکروسافت و درود بر بیل گیتس

#<Mafia>#<C>#
دوشنبه 28 فروردین 1385, 08:43 صبح
هر جور راحتی .
من طبق تجربم بهت گفتم
خود دانید .

kochol
دوشنبه 28 فروردین 1385, 11:40 صبح
به اطلاع برسونم که برنامه نوشته شده در.NET قابل استفاده در لینوکس نیز می باشد. کلا حرفی برای سی پلاس دات نت نیست. عشق بر مایکروسافت و درود بر بیل گیتس
خوب من هم برای همین می خوام برای انجینم یه پورت به دات نت بسازم تا افرادی که با دات نت کار می کنند هم بتونند از موتور ما استفاده کنند.

البته من برای حرفهایی که زدم دلیل هم دارم
مثلا می شه با درون #c اسمبلی هم نوشت.

#<Mafia>#<C>#
سه شنبه 29 فروردین 1385, 17:49 عصر
سلام
من قبلا با دات نت یه انجین کوچولو ساخته ام البته نمی شه اسمشو انجین گذاشت ولی خوب کلا همه این هایی که گفتی رو فول هستم و نمی خوام در این باره باهات بحث کنم.
دوست عزیز شرمنده اینا میگم .
ولی عمرا فول باشی
حاضرم ثابت کنم

kochol
چهارشنبه 30 فروردین 1385, 18:57 عصر
سلام
من منظورم این نیست که دات نت رو فول هستم منظورم اینه که "چرا از دات نت استفاده نمی کنم"

C++Lover
پنج شنبه 31 فروردین 1385, 10:09 صبح
می شه منصفانه تر قضاوت کرد باید و نکات مثبت و منفی رو دید و انتخاب کرد
خوب به هر حال هر کی دلالیل خاص خودشو رو داره من هم به دلایل شخصی خودم که برای خودم محترم هم هست از Net. خوشم نمی یاد. البته به اقتضای زمونه تسلط نسبی روش دارم و تا به حال چندین پروژه وب و دستکتاپ رو باهاش انجام دادم.