نمایش نتایج 1 تا 4 از 4

نام تاپیک: مشکل در ارسال پارامترها به توابع داخل MFC Library در حالت x64

  1. #1

    Question مشکل در ارسال پارامترها به توابع داخل MFC Library در حالت x64

    سلام
    به یک مشکل در ارسال پارامترها به داخل توابع یک dll از نوع MFC Library برخورد کردم:

    یک پروژه MFC Library ساختم و یک تابع به نام sum دارم که قراره دو تا int رو بگیره و جمعش رو تو خروجی return کنه ...

    تو کامپایل 32 بیتی مشکلی نیست و برنامه فراخواننده dll خروجی درست رو دریافت می کنه، اما در حالت 64 بیتی جواب درست نیست! پارامترهای ورودی رو که داخل dll چاپ می کنم مقادیر درستی به داخل تابع نرفته و در نتیجه خروجی نادرست تولید شده!

    جالبه که وقتی تابع رو به صورت Global و خارج از کلاس اصلی تعریف میکنم خروجی درست میشه ...؟

    میتونه ربطی به calling convention و نحوه ارسال پارامترها به توابع dll داشته باشه؟

    با تشکر

  2. #2

    نقل قول: مشکل در ارسال پارامترها به توابع داخل MFC Library در حالت x64

    نقل قول نوشته شده توسط Moharram مشاهده تاپیک
    سلام
    به یک مشکل در ارسال پارامترها به داخل توابع یک dll از نوع MFC Library برخورد کردم:

    یک پروژه MFC Library ساختم و یک تابع به نام sum دارم که قراره دو تا int رو بگیره و جمعش رو تو خروجی return کنه ...

    تو کامپایل 32 بیتی مشکلی نیست و برنامه فراخواننده dll خروجی درست رو دریافت می کنه، اما در حالت 64 بیتی جواب درست نیست! پارامترهای ورودی رو که داخل dll چاپ می کنم مقادیر درستی به داخل تابع نرفته و در نتیجه خروجی نادرست تولید شده!

    جالبه که وقتی تابع رو به صورت Global و خارج از کلاس اصلی تعریف میکنم خروجی درست میشه ...؟

    میتونه ربطی به calling convention و نحوه ارسال پارامترها به توابع dll داشته باشه؟

    با تشکر
    بله البته که میتونه ارتباطی به calling convention در 64 بیتی داشته باشه، چون در 64 بیتی پارامترها توسط رجیسترها ارسال میشوند بنابراین امکان داره که مشکلی وجود داشته باشه
    بهتره سورس تون را اینجا قرار میداید بهتر مشخص میشه
    البته اگر دادهایی که لازم دارید را توسط یک استراکچر بسته بندی کنید و آفست استراکچر را به dll بدید، تو کتابخانه هم هر تغییری خواستید اعمال کنید اینطوری لازم نیست مقداری را هم return کنید هم بهینه تر هست و هم سریعتر از روش پاس دادن داده های خام
    به این علت که فضای آدرس کتابخانه های shared با فضای آدرس باینری main متفاوت هست بنابراین آدرس دهی توسط GOT کلاک های بیشتری مصرف میکند، بنابراین ارسال آفست به فضای آدرس کتابخانه خیلی بهینه تر هست

  3. #3

    نقل قول: مشکل در ارسال پارامترها به توابع داخل MFC Library در حالت x64

    ممنون از پاسخی که دادید ...

    البته سورس خاصی لازم نیست و با یک برنامه اولیه که خود ویزارد میده میشه همین حالت رو به وجود آورد. به این صورت که یک پروژه از نوع MFC Library درست میکنیم و یک تابع sum با دو ورودی و یک خروجی تعریف می کنیم، همین ...

    البته مشکل در return تابع نیست و ظاهرا پارامترها درست منتقل نشدند.

    یک باره دیگه بگم که در حالت 32 بیتی این مشکل نیست و همچنین تابع اگر Global باشه و داخل کلاس اصلی DLL نباشه باز هم این مشکل بوجود نمیاد!

    ممنون

  4. #4

    نقل قول: مشکل در ارسال پارامترها به توابع داخل MFC Library در حالت x64

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

تاپیک های مشابه

  1. Add Library
    نوشته شده توسط pouya1999best@g در بخش Android Studio
    پاسخ: 1
    آخرین پست: دوشنبه 30 تیر 1393, 04:43 صبح
  2. سوال: راهنمایی - استفاده از توابع farsi library در VS2010
    نوشته شده توسط ramin005 در بخش C#‎‎
    پاسخ: 13
    آخرین پست: چهارشنبه 12 تیر 1392, 15:41 عصر
  3. ُShared Library VS static Library به همراه يک سئوال
    نوشته شده توسط rabinhood_tehran در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 1
    آخرین پست: چهارشنبه 06 آبان 1388, 12:09 عصر
  4. library construction kit قابل توجه آقای افشین پور
    نوشته شده توسط Andy در بخش Foxpro
    پاسخ: 1
    آخرین پست: دوشنبه 13 مرداد 1382, 06:21 صبح

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •