PDA

نسخه کامل مشاهده نسخه کامل : کار با DLL و مشکلات آن



vahid78ir
07-04-2018, 14:12
سلام دوستان
ما دو تا برنامه داریم به نامهای A و B که با ++C نوشته شده و به وسیله یک DLL به هم متصل می باشد ، برنامه A اطلاعات عددی 1.2356 را به DLL ارسال نموده و در آنجا به متغییر x انتقال داده می شود سپس برنامه B دی ال ال را صدا زده و x را می خواند ، مشکل اینجاست وقتی برنامه B اجرا می شود اطلاعات را دریافت نمی کند.
آیا این راه حل برای ارتباط دو نرم افزار با دی ال ال درست است ؟ آیا کد زیر اشتباه نوشته شده است:n13:، ممنون میشم کمکم کنید.





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

Msba
07-04-2018, 18:31
پروسس های شما با هر بار اجرا این Dll را Load می کنند. این بارگذاری های متفاوت میان دو Application باعث می شود تا حافظه مشترک برای dll وجود نداشته باشد، لذا شما مقادیر تنظیم شده را نمی بینید. برای اینکه بتوانید چنین چیزی بدست آورید باید به لینکر بفهمانید که متغیر x شما را درون حافظه ی Shared قرار دهد. برای این کار می بایست از pragma# استفاده کنید.همچنین SECTION بندی برای لینکر را نیز تنظیم کنید.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حال با بار بارگذاری dll در پروسس، یک section اشتراک گذاری شده قابل خواندن و نوشتن ایجاد می شود که بین app های load کننده این dll مشترک می شوند.
به ارتباطات بین برنامه ای در اصطلاح IPC می گویند.
من این روش IPC را پیشنهاد نمی کنم. چون خیلی اختصاصی کامپایلر و سیستم عامل است در نتیجه انعطاف کمی خواهد داشت. روش socket شاید portable ترین روش برای IPC ها باشد.

اگر هم به attribute های Section علاقه دارید این مطلب ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]) برایتان مفید است.

موفق باشید.

vahid78ir
07-04-2018, 21:43
خیلی ممنون از کد ارسالی :n40:، مشکل حل شد:n20:. یک مشورت هم می خواستم از شما بگیرم :
ما دو تا نرم افزار داریم که باید در کمترین زمان ( در حد میلی ثانیه و اگر بشه میکرو ثانیه) اطلاعات رو به هم دیگه بفرستند . دو تا روش انتخاب کردم یکی ارتباط با dll و دوم خوندن و نوشتن در حافظه ، می خواستم بدونم کدام یک هدف من رو که ارتباط سریعتر هست بهتر برآورده می کنه ؟ (ارتباط با Dll یا نوشتن در حافظه ) و آیا روش دیگری رو پیشنهاد می کنید.
کد نوشتن در حافظه :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

vahid78ir
08-04-2018, 09:02
سپاس از شما مشکل حل شد:n40: