تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




صفحه 2 از 5 اولاول 12345 آخرآخر
نمايش نتايج 11 به 20 از 48

نام تاپيک: نمايش فرم در dll

  1. #11
    اگه نباشه جاش خالی می مونه sara_she's Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    اهواز
    پست ها
    214

    پيش فرض

    سوال بعدي هم در مورد همون massagebox‌ كه گير سه پيچ داده و به هيچ صورتي كار نمي كنه
    من using namespace System.Windows.Forms ‌رو هم امتحان كردم فايده نداشت . براي نشون دادن massagebox‌هدر خاصي لازم است علاوه بر اين فضاي نام؟
    با عرض معذرت از اين همه سوالي كه مي پرسم اگه در مورد تفاوت بين using # و using‌ هم يه توضيح بدين ممنون مي شم.
    Last edited by sara_she; 12-05-2007 at 09:56.

  2. #12
    حـــــرفـه ای
    تاريخ عضويت
    Aug 2006
    پست ها
    793

    پيش فرض

    همونطور که میدونین برای نمایش فرم روشهای مختلفی وجود داره، روشی که شما به کار میبرین
    درسته و اتفاقا خیلی هم جالبه. چون تمامی فراخوانی ها در خود Dll انجام میشه. و کافی تنها اسم
    یه تابع (در کد دومتون) رو export کنین.
    اما در مورد MessageBox لازم نیست از header خاصی استفاده کنین. حتی لازم نیست از namespace
    استفاده کنین. با توجه به کدتون من یه نمونه ی کوچیک نوشتم که از MessageBox هم استفاده شده.
    (بدون استفاده از namespace )
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    اگه باز مشکل باقیه ، لطفا error که ایجاد میشه رو بذارین تا بتونیم در موردش صحبت کنیم.
    با استفاده از using# شما میتونین یه metadata رو به برنامه تون اضافه کنین.
    که شکل تعریفش به این صورت هست :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    این matadat میتونه MSIL (زبان میانه (IL) ، که تمامی کدها در Net. بعد از کامپایل ابتدایی به این زبان تبدیل
    میشن) ، Dll ، exe و یا حتی obj باشه.
    اما با استفاده using شما میتونین از یک فضای نام و یا اسمی که در این فضای نام قرار داره استفاده کنین.
    به شکل زیر تعریف میشه :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    که میتونه به شکلهای زیر استفاده بشه : ( با توجه به تعریف )
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    مشخصه که چه تفاوتی دارن. به نوع تعریفشون دقت کنین.

  3. #13
    اگه نباشه جاش خالی می مونه sara_she's Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    اهواز
    پست ها
    214

    9

    بازم از راهنمايي هاي كارسازتون ممنونم
    شرمنده اگه زياد سوال مي پرسم چون همون طور كه گفتم تو زمينه vs c++ تازه كارم ولي قبلآ با vb.net كار كردم .
    مشكلم با massagebox همواره باقيه و با اينكه به صورت هاي مختلف اونو امتحان كردم بازم خطاهاي زير رو داره:

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


    يه سوال ديگه هم داشتم مي خواستم بدونم كار با بانك اطلاعاتي تو vs c++.net چفدر با vb.net متفاوته؟

  4. #14
    حـــــرفـه ای
    تاريخ عضويت
    Aug 2006
    پست ها
    793

    پيش فرض

    دوباره سلام.
    فکر میکنم شما در CppManaged از کد مدیریت نشده استفاده میکنین.
    به عبارت دیگه مثلا از MessageBox API استفاده میکنین و این تشابه اسم بین این API و متود MessageBox
    از Net. باعث این مشکل شده. کدتون رو بررسی کنین و ببینین جای از header ی استفاده نکردین. مثلا Windows.h
    (یا باقی header ها )
    البته میتونین از کدمدیریت نشده در کد مدیریت شده استفاده کنین.
    برای رفع این مشکل میتونین از ماکروی undef# استفاده کنین. به شکل زیر و قبل از فراخوانی متود MessageBox
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

    اما در مورد سوال دومتون :
    به غیر از Syntax زبان ها هیچ فرقی باهم نمیکنن.
    اگه دقت کنین تمامی زبان های Net. مثل #C و VB و ++C و یا #J از کلاس های Net. برای توسعه برنامه ها استفاده میکنن. بنابراین اگه شما نمونه ای برای دسترسی به یه بانک دارین با کمی تغییر میتونین از اون در زبان دیگه
    ای استفاده کنین. اما روش بهتری هم وجود داره. اونم استفاده از ClassLibrary مجوعه Net. هست.
    به راحتی یه Dll ای که در VB نوشتین رو میتونین در #C استفاده کنین. واقعا به راحتی امکان پذیر هست.
    تنها با چند کلیک!!!

  5. #15
    اگه نباشه جاش خالی می مونه sara_she's Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    اهواز
    پست ها
    214

    9

    د ر مورد messagebox بعد از استفاده از undef ديگه خطاهاي گفته شده رو نمي ده ولي موقع اجرا messagebox رو هم نشون نمي ده !يعني با كليك روي دكمه اي كه كد undef messagebox‌ رو براش تعريف كردم هيچ اتفاقي نمي افته !
    سه سوال برام به وجود اومده‌:

    اول اينكه چرا نشون نمي ده ؟
    دوم : undef چه كاري انجام ميده و اگه بخوايم ازش استفاده نكنيم چه راه حلي وجود داره؟
    و سوم اينكه : مي شه فرق manage code و unmanage code‌ رو توضيح بدين . اصلا به چه كد يا پروژه اي مديريت شده و به كدوم مديريت نشده مي گن و فرقشون چيه

    و ديگه اينكه منظورتون رو از اين جمله متوجه نشدم:

    کدتون رو بررسی کنین و ببینین جای از header ی استفاده نکردین. مثلا Windows.h
    (یا باقی header ها )
    Last edited by sara_she; 14-05-2007 at 09:29.

  6. #16
    حـــــرفـه ای
    تاريخ عضويت
    Aug 2006
    پست ها
    793

    پيش فرض

    وقتی از undef استفاده میکنین اسمی که قبلا با استفاده از define تعریف شده
    از بین میره. در مورد برنامه ی شما من فکر میکنم از MessageBox ApI استفاده شده.
    واگه اون رو در تعریفش ببینین بعد از فراخوانی این api از با استفاده از define تابع MessageBoxW
    که برای Unicode ها هم به کار میره به صورت MessageBox تعریف شده.
    اما در مورد کار کردنش من مطمئن هستم . اگه براتون امکان داره در مورد نوع پروژه ای ایجاد کردین توضیح
    بدین و بهتر اینکه که کدی که نوشتین رو برام بذارین. (source کامل)

    اما در مورد کدهای مدیریت شده و مدیریت نشده (ManagedCoode & UnmanagedCode)
    به طور خیلی ساده میشه گفت که شما برنامه هایی رو که با استفاد از MFC یا ++VC مینویسن مدیریت نشده
    و کدهایی که در Net. مینویسین مدیریت شده هستند به شرطی که با CLR اجرا بشن.
    اگه با ++C کار کرده باشین وقتی بخواین یه نمونه از یه Object مثلا یه کلاس بسازین به شکل زیر عمل میکنین:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    الان شما یه نمونه از کلاس دارین. اما مشکلی که وجود داره اینه که کد بالا روی Heap ایجاد میشه نه Stack.
    (Stack رو سیستم عامل کنترل میکنه.)
    بنابراین وقتی شما کارتون با این نمونه تموم بشه خودتون اونرو باید از حافظه آزاد کنین. به شکل زیر :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    به این مفهوم هست که مدیریت حافظه در برنامه ای که مینویسین با شماست نه کامپایلر .
    ممکنه تو مثال بالا زیاد مهم به نظر نیاد چون میشه این طور گفت که کافیه در پایان برنامه (Deconstructor)
    این نمونه ها رو delete میکنیم. اما مشکل اینجاست که اگه در اثر یه Bug کلاس تون از حافظه آزاد بشه، نمونه
    هایی که از کلاس دارین هنوز وجود دارن و به کلاس اشاره دارن. خب در این جا کافیه که برنامه اجرا بشه تا
    یه فاجعه پیش بیاد.
    اما CLR در Net. این کار رو بعده داره (gc یا Garbage Collector ). که استفاده از یه شمارنده این کار رو انجام
    میده. علاوه براین فشرده سازی Heap هم به عهده ی CLR هست.
    اگه دقت کنین وقتی در Net. میخواین یه نمونه از کلاس بسازین از gc__ یا gcnew (در 2003 و 2005 )
    به این شکل عمل میکنین :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    می بینین که در تمامی کد از delete استفاده نشده و gc همون کار رو به عهده داره.
    البته این دو نوع کد موارد اشترکی هم باهم دارن و اونم استفاده از WinAPI هست. وفقط ساختار و روش دسترسی
    و مدیریت اونها با هم متفاوت هست.
    توضیحش خیلی مفصل تر از اینهاست.
    امیدوارم توضیحات روشن باشن.

    گفتم که میتونین در Mcode میتونین از UMcode استفاده کنین.
    کافیه به ClassLibrary یه Header خودتون اضافه کنین. احتمالش خیلی زیاد که چنین مشکلاتی پیش بیاد.

  7. #17
    اگه نباشه جاش خالی می مونه sara_she's Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    اهواز
    پست ها
    214

    14

    با سلام
    اول از هر چيزممنون از راهنمايي كاملتون

    در مورد كد پروژه چون طولاني است نمي تونم اينجا بذارم فقط توضيحي كه مي تونم بدم اينه كه من يه dll‌ آماده دارم كه بايد يه سري ويژگي ها و توابع و فرم به اون اضافه كنم و از اونجايي كه وقتي مي خواستم به اين dll‌يه فرمnet.‌ اضافه كنم خطاي زير رو مي داد:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

    فكر مي كنم از كد مديريت نشده استفاده مي كنه ولي mfc dll نيست چون اگه بخوام فرم mfc‌بهش اضافه كنم خطايي مبني بر اينكه "فرم mfc application تنها به پروژه هاي mfc‌مي تواند اضافه شود "ميد هد
    براي حل مشكل اضافه كردن فرم net. همونطور كه قبلا گفتيد use managed extension‌رو yes‌ كردم و mscorlib.dll هم به هدر كلاس اضافه كردم(آيا با اين كار Dll‌ من به كد مديريت شده تبديل شد؟) و اضافه كردن فرم بدون مشكل انجام شد. حالا من كلاسي از نوع فرم net. دارم

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

    كه هدر اونو به dll اضافه كردم شايد اونجوريكه من برداشت كردم منظورتون از
    گفتم که میتونین در Mcode میتونین از UMcode استفاده کنین.
    کافیه به ClassLibrary یه Header خودتون اضافه کنین. احتمالش خیلی زیاد که چنین مشکلاتی پیش بیاد.
    همين باشه اگه درست نيست بهم بگين و راه حل مشكل رو چي پيشنهاد مي كنيد؟

    حالا حدس مي زنيد اين dll از چه نوعي است و چگونه ساخته شده و مشكل messagebox چطور حل مي شود . اينو هم بگم كه دستور
    undef MessageBox # رو هم تو هدر كلاسم (جايي كه كلاس تعريف شده) در روال كليك دكمه و هم در dll امتحان كردم ولي با اينكه خطايي ازش نمي گيره اجراشم نمي كنه
    Last edited by sara_she; 16-05-2007 at 09:53.

  8. #18
    اگه نباشه جاش خالی می مونه sara_she's Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    اهواز
    پست ها
    214

    پيش فرض

    ببينيد يه لينك اين پايينه به نظرتون مشكل منو حل مي كنه چون من زياد ازش سر در نياوردم
    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]

  9. #19
    حـــــرفـه ای
    تاريخ عضويت
    Aug 2006
    پست ها
    793

    پيش فرض

    راستش رو بخواین خیلی مشکله بشه در مورد پروژه ای با این تعاریف بدون دیدنش نظر داد.
    چون هر بار شما پستی میذارین توش یه مطلب جدید هست!!!
    اما با توضیحاتی که شما دادین و اینکه خطایی که مبنی براین :
    "فرم mfc application تنها به پروژه هاي mfc‌مي تواند اضافه شود " میتونه یه Win32Dll باشه.
    که برای اضافه کردن Form به اون باید از طریق Resource ها این کار رو انجام بدین. البته اجباری نیست.
    اما نمیشه به اون کلاس های MFC رو اضافه کرد. مگر در هنگام ایجاد این نوع Dll اجازه ی استفاده از MFC
    رو بدیم.

    آيا با اين كار Dll‌ من به كد مديريت شده تبديل شد؟
    احتمالا نتونستم خوب در مورد ManagedCode و UnmanagedCode توضیح بدم.
    با اضافه کردن مثلا یه Dll از مجموعه ی Net. به پروژه ای که مدیریت شده نیست ،
    ( Win32App-Dll , MFCApp-Dll-ActiveXDll , Cpp Code) پروژه تون به یه پروژه ی مدیریت شده تبدیل نمیشه.
    شما در کدتون میتونین هم مدیرت شده کار کنین و هم مدیریت نشده. اما وقتی دارین ترکیبی کار میکنین و یا
    اینکه مدیریت شده مینویسن باید برنامه رو با استفاده از CLR اجرا کنین. (Common Language Runtime)
    در حقیقت کد مدیریت شده بدون CLR معنی نداره.

    شما از خود MessageBox استفاده کنین. مثلا به این شکل :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

    اگه میشه بگین این Dll ای که دارین روش کار میکنین مربوط به چی میشه و شما از کجا گرفتینش.
    (چون دارین رو Source ش کار میکنین.)

  10. #20
    حـــــرفـه ای
    تاريخ عضويت
    Aug 2006
    پست ها
    793

    پيش فرض

    در مورد آدرسی که گذاشتین باید بگم یه سایت فوق العاده مشهور ، که نمونه های واقعا عالی داره.
    به نظرتون مشكل منو حل مي كنه
    منظورتون مشکلی که در مورد MessageBox دارین ، هست ؟
    اگه آره ، باید بگم مشکلتون قابل حل هست اما نه به کمک این site (گرچه نمونه های ManagedCpp میتونه دید
    بهتری به شما بده.)
    و گر در مورد یادگیری منظورتون هست ، باید بگم حتما!
    فقط به سوالی که تو پست قبلی گذاشتم به دقت جواب بدین.

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •