ايران ويج

نسخه‌ی کامل: مشکل dll ها با برنامه تحت شبکه
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2
سلام.
من یه برنامه نوشتم که تحت شبکه کار میکنه. یعنی فایل ها به صورت کلاینت سرور به هم وصل میشن و کار میکنن. تعدادی هم dll نوشتم که برنامه برای اجرای بعضی دستورات بهشون نیاز داره.
برنامه رو سیستم خودم به خوبی کار میکنه. اگه dll ها نباشن سرور به کلاینت پیغام میده و کلاینت dll ها رو برای سرور آپلود میکنه و بعد هم برنامه بدون مشکل کار میکنه. ولی من ممکنه مجبور شم بعد از اتمام کار dll هارو پاک کنم. ولی اگه از یه dll استفاده کنم دیگه نمیتونم پاکش کنم. تا زمانی که سرور اجراست نمیشه اون dll که ازش استفاده شده رو پاک کرد. حالا چطور dll هارو پاک کنم؟

مشکل دوم اینه که برنامه رو بردم تو یه شبکه محلی تست کردم. بدون مشکل کار کرد. دستوراتی که نیاز به dll داشتن پیغام رو به کلاینت میفرستادن و کلاینت هم فایل ها رو برای سرور میفرستاد. ولی بعد از ارسال dll ها باز اون دستوراتی که وابسته به dll ها بودن کار نمیکردن. dll ها بعد از ارسال تو system32 میشینن. مشکل کجاست؟
مشکل کاملا واضحه پیمان جان !
وقتی شما فایل DLL رو توی system32 بریزی و ازش استفاده کنی باید به یک نکته مهم توجه داشته باشی .
اونهم اینکه در این حالت وقتی شما یکی از توابع اون DLL رو صدا بزنی در واقع از ویندوز میخوای که فایل DLL رو برات بطور اتوماتیک توی حافظه لود کنه و بعد شما خیلی راحت ازش استفاده کنی ( روش مشابه استفاده از توابع API ) . شما قادر نیستی که این فایل رو پاک کنی چراکه ویندوز تا بسته شده برنامه شما ریفرنسی از اون DLL رو توی حافظه نگه میداره . پس امکان پاک کردن یا تغییر دادنش نیست ! ( این مشکل توی دات نت با وجود اسمبلی ها حل شده )

شما بهتره از روش داینامیک استفاده کنی . یعنی فایل DLL رو از کلاینت بگیری ، با تابع loadlibrary فایل DLL رو خودت توی حافظه لود کنی ، ازش استفاده کنی ، از توی حافظه خارجش کنی و بعد پاکش کنی . در آخر برنامه شما هم با خیال راحت میتونه به کار خودش پایان بده !

http://support.microsoft.com/default.asp...us;q106553
http://www.zappersoftware.com/Help/how-to-use-dll.html
سلام.
مرسی ممد.
مشکل دوم چی؟ چرا تو شبکه مشکل پیش میاد؟ فایل رو تو سیستم 32 آپلود میکنم ولی برنامه نمیتونه ازش استفاده کنه.
واسه DLL معمولی نباید مشکلی پیش بیاد ولی اگر اون DLL شامل اشیای COM باشه اونوقت باید رجیستر بشه !
سلام.
منظورت از اشیای کام چیه؟ بیشتر توضیح بده.
COM این قابلیت رو داره که با کمک فایل های DLL مفاهیم شی گرایی رو توی فایلهای DLL گسترش بده . اشیای COM مثلا قابلیت دارند بین دوتا پروسس مجزا حتی روی دوتا ماشین مختلف صدا زده بشن ( مثلا همون آتوماسیون ActiveX ها )
سلام.
حالا چطور این مشکل رو حل کنم. فکر میکنم یه مشکل خیلی سادست. تعجب میکنم که dll ها کار نمیکنن.
لازمه با regsvr32.exe فایل dll رو رجیستر کنم؟
فقط DLL هایی که COM server هستند نیاز به رجیستر شدن در سیستم دارند . DLL معمولی نیازی به رجیستر شدن نداره . دقت کن که فایل DLL شما باید حتما پسوند dll داشته باشه تا بطور اتوماتیک ویندوز اونو لود کنه . همون طور که گفتم شما چرا از روش لود کردن داینامیک استفاده نمی کنی ؟؟ در این وضعیت هیچ مشکلی نباید پیش بیاد !
سلام.
فایل های معمولی هستن. dll هم هستن. من هم کنار برنامه کپی شون میکنم هم تو سیستم32 ولی کار نمیکنن. رو سیستم خودمم هم از همون مسیر که به برنامه اضافه شدن لود میشن و اگه فایل ها رو از اون مسیر پاک کنم رو سیستم خودم هم کار نمیکنه.
میخواستم اگه بشه از LOADlibrary استفاده نکنم. چون به نظرم یه مشکل سادست و باید حل شه.

تابع LOADlibrary خوبیش اینه خودش آدرس فایل رو میگیره ولی بعد که لود کردم چطوری از توابع داخل dll استفاده کنم?
سلام.
چه طور از LOADlibrary استفاده کنم. لود میکنم یه چیزی شبیه هندل بر میگردونه. حالا چطور توابع تابع رو صدا بزنم. با createprocess باید این کارو بکنم؟
دستت درد نکنه محمد خیلی خوب توضیح میدی
صفحه‌ها: 1 2