PDA

View Full Version : دسترسی به متغیرهای static عضو یک کلاس از داخل DLL



sh_roohani
یک شنبه 02 مرداد 1384, 20:17 عصر
سلام،
من یه کلاس تعریف کردم و یه عضو static به شکل زیر هم براش تعریف کردم:

static CArray<CString, CString> m_astrSerialPorts;
حالا این کلاس رو بردم توی یه MFC Extension DLL و توی اعلانش هم از AFX_EXT_CLASS استفاده کردم. الان هم همه چی خوبه جز اینکه (فقط و فقط) دسترسی به اعضای استاتیک اون کلاس داخل DLL، از داخل یه DLL دیگه، منجر به تولید خطای لینک unresolved external می شه! در حالیکه دسترسی از داخل یه پروژه SDI مشکلی نداره. در واقع پروژه های هردوتای این DLLها، dependency یه پروژه SDI هستن. در ضمن از روش Import Library استفاده کردم، نه از تابع LoadLibrary. همه lib ها و header های مناسب رو هم به کار بردم. ولی نمی دونم باز چرا این مشکل پیش میاد.
در ضمن یه نکته حائز اهمیت اینه که این مشکل به هیچ وجه در دسترسی به توابع استاتیک پیش نمیاد و فقط در دسترسی به متغیرهای استاتیک پیش میاد.
کسی در این مورد چیزی می دونه؟ آیا این طور دسترسی به متغیرهای استاتیک عضو یه کلاس ترفند خاصی داره؟

Blaster
دوشنبه 03 مرداد 1384, 22:55 عصر
احتمالات زیادی وجود داره ! نمیشه گفت اشکال کجاست .
تابع static با تابع غیر static هیچ فرقی نداره جز دراینکه تابع static اشاره گر this رو دریافت نمی کنه برای همین هم فراخوانی تابع static هیچ مشکلی نداره .
بهتره در DLL از متغیر های Global یا Shared Memory استفاده کنید. اما اینها ممکنه که باز هم مشکل ساز بشن . برای همین باید یک سری توابع برای دسترسی به اون عضو رو هم بنویسید که دیگه نیازی به فراخوانی عضو مورد نظر نباشه!
البته حتما یادتون هست که کلاس مورد نظر رو درون DLL دوم Import کنید!

sh_roohani
سه شنبه 04 مرداد 1384, 09:37 صبح
بله Blaster جان، عرض کردم که از Import Library استفاده کردم. اما بالاخره دیروز این مشکل رو به طور موقت با برگردوندن یه اشاره گر به CArray از طریق یه تابع static دور زدم. یعنی همون کاری که شما هم بهش اشاره کردین. اما نمی دونم که آیا این راه حل قطعی مسئله س. یعنی اون نوع دسترسی که در پست قبلی گفتم امکان پذیر نیست؟