امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
رشته ثابت
نویسنده پیام
ajlajlajl آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 2,192
موضوع‌ها: 70
تاریخ عضویت: مهر ۱۳۸۴

تشکرها : 932
( 2618 تشکر در 1020 ارسال )
ارسال: #12
RE: رشته ثابت
بازم خدا خیر mojtabamalaekeh بده.اگه میتونستم 4 تا تشکر برات میگذاشتم.(البته هنوز نرفتم تست کنم)

Di Di نوشته است:من كه سي بلد نيستم ولي ميل نمودن سورس آماده از شما بعيده !!

آقا دیدی من که سورس نخواستم. فقط اسم یه تابعو میخواستم. اونم یه شوخی بود(جلوشم نوشتم که...)

میخوام این رشته ثابتو توی زبانهای مختلف بررسی کنم ببینم با توابع api چطوری میشه.
دست آقا ممد هم درد نکنه ولی اونا که توی ویبی و دلفی و اینا با string و pchar و اینجور چیزا جایگزین میشه. مشکلم تو این بود که این رشته های ثابت توی هر زبانی یه جوریه. برای همین دنبال یه تابع نمونه بودم که با اون تست کنم.

فعلا که پیدا شد دست همگی هم درد نکنه (مخصوصا آقا didi)

میزان رای دشمن است!
[تصویر:  cff100.png]
۰۳-اردیبهشت-۱۳۸۷, ۱۴:۴۰:۲۲
وب سایت ارسال‌ها
پاسخ
Mamad2003 آفلاین
کاربر با تجربه
****

ارسال‌ها: 1,150
موضوع‌ها: 18
تاریخ عضویت: آذر ۱۳۸۲

تشکرها : 9
( 388 تشکر در 232 ارسال )
ارسال: #13
RE: رشته ثابت
عزیزان کلا نمیشه یک string با طول نامتناهی داشت در هیچ سیستمی !!!
در وی بی ، وقتی شما یک text رو در یک string ذخیره میکنید ، وی بی در پشت پرده اندازه string رو اتوماتیک بزرگ میکنه . این خودش یک نقطه ضعفه در کارایی سیستم !!
همین طور کلاس های String در سیستم های شی گرا مثلا در جاوا یا Net. از همین مکانیسم استفاده میکنند ولی برای حفظ کارایی بیشتر به شما اجازه نمیدن که هیچ کلاسی ازشون مشتق کنید ( یعنی کلاس String نمیتونه کلاس پایه برای هیچ کلاس دیگه ای بشه ) حتی جاوا دو کلاس متفاوت برای String در نظر میگیره و همه این درسر ها علتش ضعف کارایی این مکانیسم هست ولی چون این مکانیسم ، کار رو برای برنامه نویسان راحت تر میکنه و عملا کارایی اون در بسیاری از سیستم ها به چشم نمیاد ازش استفاده میشه . توابع API به زبان C نوشته شدن و همچین مکانیسمی به شکل ذاتی در زبان C وجود نداره ( البته با توابعی مثل realloc میشه اون مکانیسم رو شبیه سازی کرد )
در هر حال ، String در زبان C چیزی نیست جز آرایه ای از کارکتر ها که انتهای اون یک NULL قرار میگیره . نکته مهم برای استفاده string وی بی در توابع API اینه که شما باید string خودتون رو به شکل ByVal ارسال کنید !!

http://support.microsoft.com/kb/187912

گويند بهشت و حور و کوثر باشد  ..  جوي می و شير و شهد و شکر باشد
پر کن قدح باده و بر دستم نه      ..   نقدي ز هزار نسيه خوشتر باشد  
۰۳-اردیبهشت-۱۳۸۷, ۱۶:۰۱:۲۸
ارسال‌ها
پاسخ
ajlajlajl آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 2,192
موضوع‌ها: 70
تاریخ عضویت: مهر ۱۳۸۴

تشکرها : 932
( 2618 تشکر در 1020 ارسال )
ارسال: #14
RE: رشته ثابت
توی turbo c++ یه string بود که؟ یا تعریف به شکل char *c; i که مینوشتیم قضیش چی بود؟
از اینا که بگذریم.من مشکلم با ارسال و دریافت همون آرایه کاراکتری است. مثلا توی تابعی mojtabamalaekeh معرفی کرده دو تا فیلد از ساختار WIN32_FIND_DATA از نوع TCHAR آرایه ای هسته.توی ویبی اینجوری کار میکنند:string*len توی دلفی مینویسند: PChar[len]; i . اینا یه فرم ثابت برای این کار دارند. من دنبال این فرم ثابت توی دات نت هستم.؟ تا حالا خیلی دنبالش رفتم. هرجایی یه چیزی نوشته هیچکدومشم کامل نیست یا استاندارد نیست یا بدرد چند تا کار مخصوص میخوره. آیا اصلا امکان چنین چیزی هست؟

میزان رای دشمن است!
[تصویر:  cff100.png]
۰۳-اردیبهشت-۱۳۸۷, ۱۸:۱۳:۴۴
وب سایت ارسال‌ها
پاسخ
Mamad2003 آفلاین
کاربر با تجربه
****

ارسال‌ها: 1,150
موضوع‌ها: 18
تاریخ عضویت: آذر ۱۳۸۲

تشکرها : 9
( 388 تشکر در 232 ارسال )
ارسال: #15
RE: رشته ثابت
نقل قول: توی turbo c++ یه string بود که؟ یا تعریف به شکل char *c; i که مینوشتیم قضیش چی بود؟

در زبان C همونطور که گفتم رشته ها آرایه ای از کاراکتر ها هستند . نکته بعدی اینه که آرایه ها همه در واقع اشاره گر هستند و تفاوتی بین اونها نیست . مثلا هر دوتا تعریف پایینی یکسان هستند :
کد:
char str[7]="My text";
char *str="My text";

در دات نت و در زبانهای ++C یا #C به شکل مشابهی میشه string با طول ثابت تعریف کرد . برای وی بی دات نت هم که شکل کلی <(VBFixedString(len> وجود داره . مثال :

کد:
Structure FixedType
    <VBFixedString(1)> Public PrefixString As String
    <VBFixedString(5)> Public myString As String
    <VBFixedString(1)> Public PostfixString As String
End Structure

گويند بهشت و حور و کوثر باشد  ..  جوي می و شير و شهد و شکر باشد
پر کن قدح باده و بر دستم نه      ..   نقدي ز هزار نسيه خوشتر باشد  
۰۳-اردیبهشت-۱۳۸۷, ۲۲:۲۶:۵۸
ارسال‌ها
پاسخ
تشکر شده توسط : ajlajlajl
ajlajlajl آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 2,192
موضوع‌ها: 70
تاریخ عضویت: مهر ۱۳۸۴

تشکرها : 932
( 2618 تشکر در 1020 ارسال )
ارسال: #16
RE: رشته ثابت
Attempted to read or write protected memory. This is often an indication that other memory is corrupt."
این خطا رو میده. توع تابع findfirstfile گذاشتم. از روش آرایه کاراکتری هم رفتم اون هم این خطا رو میده:
Specified array was not of the expected type

میزان رای دشمن است!
[تصویر:  cff100.png]
۰۴-اردیبهشت-۱۳۸۷, ۰۹:۴۴:۱۶
وب سایت ارسال‌ها
پاسخ
Mamad2003 آفلاین
کاربر با تجربه
****

ارسال‌ها: 1,150
موضوع‌ها: 18
تاریخ عضویت: آذر ۱۳۸۲

تشکرها : 9
( 388 تشکر در 232 ارسال )
ارسال: #17
RE: رشته ثابت
در اینجا شما مجبور هستید از تکنیکی با نام Data Marshaling استفاده کنید . به جای استفاده از VBFixedString شما باید از خاصیت MarshalAsAttribute استفاده کنید .

شما این imports رو انجام میدی :

کد:
Imports System.Runtime.InteropServices

بعد از خاصیت MarshalAsAttribute به شکل زیر میتونی استفاده کنی . مثال :
کد:
Structure FixedType
    <MarshalAsAttribute(UnmanagedType.LPStr)> Public PrefixString As String
    <MarshalAsAttribute(UnmanagedType.LPStr)> Public myString As String
    <MarshalAsAttribute(UnmanagedType.LPStr)> Public PostfixString As String
End Structure

حتی اینو میتونی توی تعریف تابع خودت هم بگذاری . مثال :
کد:
Declare Auto Function SetEnvironmentVariable Lib _
   "kernel32" Alias "SetEnvironmentVariableA" ( _
   [MarshalAsAttribute(UnmanagedType.LPStr)] _
   ByVal lpName As String, _
   [MarshalAsAttribute(UnmanagedType.LPStr)] _
   ByVal lpValue As String _
   ) As Boolean

برای اطلاعات بیشتر اینجا رو ببین :
http://msdn2.microsoft.com/en-us/library/172wfck9.aspx
http://visualbasic.about.com/od/usingvbn...APISet.htm
http://msdn2.microsoft.com/en-us/library...dtype.aspx

گويند بهشت و حور و کوثر باشد  ..  جوي می و شير و شهد و شکر باشد
پر کن قدح باده و بر دستم نه      ..   نقدي ز هزار نسيه خوشتر باشد  
۰۴-اردیبهشت-۱۳۸۷, ۱۴:۳۱:۱۵
ارسال‌ها
پاسخ
تشکر شده توسط : ajlajlajl


پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS