سلام.
فکر میکنم یه مقدار سوالتون برای سایر دوستان عجیب باشه.
از این بابت میگم چون نوع ACHAR ممکنه برای دوستان آشنا نباشه.
پس بهتره اول در مورد ACHAR صحبت کنیم.
برنامه نویسان ++C با نوع WCHAR آشنا هستند. البته کسانی که برای Windows برنامه
می نویسن بیشتر با این نوع آشنا هستند.
میدونیم که char یه نوع 8 بیتی هست که برای نگهداری character ها به کار میره.
WCHAR همون char هست منتها با طول 16 بیت که برای ذخیره کردن Unicode ها به کار میره.
به شکل زیر تعریف شده :
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
خب حالا بر میگردیم به ACHAR .
ACHAR در واقع همون WCHAR هست اما در ArxSDK به جای WCHAR از ACHAR استفاده شده.
اول این حالت رو بررسی می کنیم که میخواین ACHAR رو به String تبدیل کنین.
کد زیر این کار رو انجام میده :
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و این تابع به شکل زیر میتونه استفاده شه :
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اما در مورد اینکه String رو به AHCAR تبدیل کنین مقداری قضیه پیچیده تر هست.
در اینجا قرار هست شما از Managed به unmanaged به اصطلاح مهاجرت کنین.
در این صورت باید با Marshaling آشنا باشین.
در کلاس Marshal متودی وجود داره به نام StringToHGlobalUni که String رو (که تایپ مدیریت شده هست)
رو به فضای مدیریت نشده کپی میکنه. به عبارت دیکه مقدار فضا از حافظه ی مدیریت نشده به اون
اختصاص میده. بعد از استفاده از این متود ، باید فضای اشغال شده رو آزاد کرد که با استفاده از متود
FreeHGlobal میشه این کار رو انجام داد.
خب متود زیر این کار رو انجام میده.
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
البته با توجه به استفاده از Unicode و ماکروهای استفاده شده ممکنه ACHAR به صورت char هم
تعریف شده باشه در این صورت از کد بالا با کمی تغییر میشه استفاده کرد.
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
سعی کردم خوب توضیح بدم ، اگه جاییش واضح نبود در موردش صحبت میکنیم.