PDA

View Full Version : حرفه ای: خواندن اطلاعات از آدرس حافظه



mohamadz5
دوشنبه 11 اردیبهشت 1391, 15:12 عصر
سلام. اساتيد لطفا راهنمايي كنيد .
من نياز دارم اطلاعاتي را در حافظه نگه داشته و در برنامه هاي ديگر از آن استفاده كنم .
در كد زير متغير addr حاوي آدرسي از حافظه است كه مقدار برابر 5 در آن وجود دارد .
در پايان متغير a حاوي مقدار 5 مي شود .


public static unsafe void getaddress(out string str1,out string str2)
{
int i = 5;
int* ptr = &i;
IntPtr addr = (IntPtr)ptr;

int a = *(int*)addr;
str1 = ((int)addr).ToString();
str2 = a.ToString();
}


مشكل اينجاست در تابعي ديگر اين آدرس مقداري برابر 0 دارد در صورتي كه مقدار واقعي 5 است .
a=0


public static unsafe void getaddressValue(out string str1, IntPtr addrress)
{
int a = *(int*)addrress;
str1= a.ToString();
}

mohsenns5
سه شنبه 12 اردیبهشت 1391, 10:09 صبح
منم همين مشكلو داشتم تويكي از برنامه هام بايد اينكارو ميكردم كه ادامه ندادم.
هنوز واسم سواله دوستان اگه ميدونيد راهنمايي كنيد

d_derakhshani
سه شنبه 12 اردیبهشت 1391, 10:36 صبح
اگه تو ASP.Net اینکار رو می کنید نمیشه.
دلیل:
وقتی صفحه ای از طرف کلاینت درخواست میشه یک نخ آزاد از ThreadPool برداشته میشه و شروع به عملیات پروسس و رندر صفحه می کنه. بعد این عمل تمامی منابع از جمله متغیرها از حافظه release میشه و نخ هم به ThreadPool بر میگرده. دفعه بعد که فراخوانی میشه دیگه هیچ خبری از متغیر های و منابع قبلی نیست حتی نخ هم همون نخ قبلی نیست و کلا هیچ چیز دیگه وجود نداره و روز از نو روزی از نو. اینگار که صفحه تازه متولد شده باشه.
حتما شاید بپرسید پس حالت کنترل ها چطور حفظ میشه و یا سسشن چطور شناسایی میشه که واسه کاربر خاصی هست. جواب با شما.

mohamadz5
سه شنبه 12 اردیبهشت 1391, 12:30 عصر
من بايد برنامه اي بنويسم كه توانايي ارتباط با نرم افزار سرور را داشته باشه .
اين برنامه exe فقط پارامتر آدرس حافظه را قبول مي كنه . چيكار ميشه كرد براي ارتباط و انتقال داده بين صفحه وب من و برنامه exe سرور ؟

d_derakhshani
سه شنبه 12 اردیبهشت 1391, 12:40 عصر
ارتباط بین برنامه سرور و Exe ارتباطی به بحث حافظه نداره. یعنی می تونید به هر دلیلی در برنامه win از اشاره گر ها استفاده کنید به هر دلیلی اما لزوما ارتباطی با بر قراری سرور نداره و اینکه این آدرس حافظه ها مربوط به سیستم لوکال میشه. در نتجیه این دو دو سوال متفاوت هست.
برای ارتباط با سرور استفاده از socket، وب سرویس و WebRequest ممکنه.

mohamadz5
سه شنبه 12 اردیبهشت 1391, 13:57 عصر
ممنون از راهنمايي
متاسفانه سورس برنامه exe قابل تغيير نيست و فقط پارامتر آدرس حافظه را قبول مي كنه .

mohsenns5
شنبه 16 اردیبهشت 1391, 10:39 صبح
دوستان بزاريد مسئله رو يه جور ديگه بگم:
يك برنامه اجرايي ويندوزي روي سرور داريم كه يك مقدار رو تو يه تكست باكس ميگيره و نتيجه رو بر ميگردونه.
استفاده از برنامه بالا توسط كاربر مشكلي نداره، اما بنده ميخوام يه وب سايت بنويسم و رو سرور قرار بدم و هر كلاينت كه سايت رو باز كرد بتونه با برنامه ويندوزي كه گفتم ارتباط برقرار كنه يعني كلاينت يك مقدار بده به برنامه ويندوزي و نتيجه رو ازش دريافت كنه.
تا اينجا دوستان راهنمايي كنن چطوري ميشه همچين كاري انجام داد.

اگر برنامه ويندوزي مقدار وروديش رو فقط از آدرس فيزيكي حافظه بخواد بخونه نه از تكست باكس، در اينصورت چه راه حلهايي موجوده؟

alonemm
شنبه 16 اردیبهشت 1391, 15:32 عصر
دوستان بزاريد مسئله رو يه جور ديگه بگم:
يك برنامه اجرايي ويندوزي روي سرور داريم كه يك مقدار رو تو يه تكست باكس ميگيره و نتيجه رو بر ميگردونه.
استفاده از برنامه بالا توسط كاربر مشكلي نداره، اما بنده ميخوام يه وب سايت بنويسم و رو سرور قرار بدم و هر كلاينت كه سايت رو باز كرد بتونه با برنامه ويندوزي كه گفتم ارتباط برقرار كنه يعني كلاينت يك مقدار بده به برنامه ويندوزي و نتيجه رو ازش دريافت كنه.
تا اينجا دوستان راهنمايي كنن چطوري ميشه همچين كاري انجام داد.

اگر برنامه ويندوزي مقدار وروديش رو فقط از آدرس فيزيكي حافظه بخواد بخونه نه از تكست باكس، در اينصورت چه راه حلهايي موجوده؟

بهترین راه برای اینکار استفاده از وب سرویس هاست.

http://barnamenevis.org/showthread.php?337911-%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-%DA%A9%D9%86%DB%8C%D8%AF!-%D8%B3%D8%B1%D9%88%D8%B1-%DA%A9%D9%86%D8%AA%D8%B1%D9%84-%D9%BE%D9%86%D9%84-%D9%85%D8%AA%D8%AD%D8%B1%DA%A9-%D8%A8%D8%A7-%D9%82%D8%A7%D8%A8%D9%84%DB%8C%D8%AA-%D8%AD%D9%81%D8%B8-%D9%85%D9%88%D9%82%D8%B9%DB%8C%D8%AA-%D9%BE%D8%B3-%D8%A7%D8%B2-%D8%AF%D8%B1%D8%AE%D9%88%D8%A7%D8%B3%D8%AA-Ajax-AloneServerControl