بازم خدا خیر mojtabamalaekeh بده.اگه میتونستم 4 تا تشکر برات میگذاشتم.(البته هنوز نرفتم تست کنم)
Di Di نوشته است:من كه سي بلد نيستم ولي ميل نمودن سورس آماده از شما بعيده !!
آقا دیدی من که سورس نخواستم. فقط اسم یه تابعو میخواستم. اونم یه شوخی بود(جلوشم نوشتم که...)
میخوام این رشته ثابتو توی زبانهای مختلف بررسی کنم ببینم با توابع api چطوری میشه.
دست آقا ممد هم درد نکنه ولی اونا که توی ویبی و دلفی و اینا با string و pchar و اینجور چیزا جایگزین میشه. مشکلم تو این بود که این رشته های ثابت توی هر زبانی یه جوریه. برای همین دنبال یه تابع نمونه بودم که با اون تست کنم.
فعلا که پیدا شد دست همگی هم درد نکنه (مخصوصا آقا didi)
عزیزان کلا نمیشه یک 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
توی turbo c++ یه string بود که؟ یا تعریف به شکل char *c; i که مینوشتیم قضیش چی بود؟
از اینا که بگذریم.من مشکلم با ارسال و دریافت همون آرایه کاراکتری است. مثلا توی تابعی mojtabamalaekeh معرفی کرده دو تا فیلد از ساختار WIN32_FIND_DATA از نوع TCHAR آرایه ای هسته.توی ویبی اینجوری کار میکنند:string*len توی دلفی مینویسند: PChar[len]; i . اینا یه فرم ثابت برای این کار دارند. من دنبال این فرم ثابت توی دات نت هستم.؟ تا حالا خیلی دنبالش رفتم. هرجایی یه چیزی نوشته هیچکدومشم کامل نیست یا استاندارد نیست یا بدرد چند تا کار مخصوص میخوره. آیا اصلا امکان چنین چیزی هست؟
نقل قول: توی 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
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
در اینجا شما مجبور هستید از تکنیکی با نام 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