نقل قول نوشته شده توسط sepehr1014 مشاهده تاپیک
میگم شاید کسی بدردش بخوره:

CString str = ....
str.GetBuffer(0);

سلام.
اگر هدفتون فقط گرفتن Pointer درونی CString هستش (به شرطیکه هیچ تغییری در string بوجود نیارید) می تونید بدین شکل نیز عمل کنید:

TCHAR *p1 = (TCHAR *)((LPCTSTR)s);


که Performance اش بالاتر هم هست.

اما کدی که شما نوشتید، باعث میشه تا Execution Path طولانی تری طی بشه و نتیجه یکسانی بدست بیاد! وقتی میگید GetBuffer(0)
GetBuffer ابتدا طول حافظه تخصیص یافته فعلی رو بررسی میکنه، اگر طول درخواستی شما بیش از میزان مزبور باشه، اضافه حافظه مورد نیاز
Reallocate میشه و Pointer به اون حافظه به شما برمیگرده. حالا وقتی شما این متود رو با پارامتر صفر Call می کنید، در واقع عمل Reallocate
انجام نمیشه، اما روند مزبور طی میشه. در صورتیکه وقتی GetBuffer رو بدون پارامتر صدا کنید، همون اتفاق رخ میده، اما دیگه متود PrepareWrite
فراخوانی نمیشه.

در هر حال، اگر GetBuffer رو با پارامتر صفر Call کردید، حواستون باشه که تابعی که گفتید پارامتری از نوع mu::string_type میگیره، خارج از
حافظه Allocate شده برای اون Pointer ننویسه...

موفق باشید.