خیلی ممنون این همه واضح و صریح توضیح میدین
مهندس توانایی خواندن زبان برنامه نویسی به صورت انگلیسی روندارم.مثلا تو یک سورسی دو تابع varptr , strptr دیدم بعد سرچ کردم سایت ایرانی چیزی نبود یک سایت خارجی بود معلومه خیلی خوب توضیح داده ولی بازمنتونستم ترجمه کنم
http://vb.mvps.org/tips/varptr/
برای برنامه نویسی یادگیری زبان انگلیسی تخصصی در حد متوسط خیلی مفید ئه چون منابع فارسی توی اینترنت خیلی محدود، ناقص، مبهم و پر از اشتباه اند.
ویژوال بیسیک طوری طراحی شده که از API ویندوز و کتابخانه های DLL متفرقه استفاده کنه، به همین جهت با وجودی که خودش اساسا کاری با آدرس حافظه نداره
یکسری توابع برای بدست آوردن آدرس حافظه متغیر هایش داره که برای ارتباط با کتابخانه های خارج از محیط ویژوال بیسیک لازم میشه.
VarPtr آدرس یک متغیر در حافظه رو بر می گردونه، در خود ویژوال بیسیک کاربرد مشخصی نداره اما موقع ارتباط با سایر زبان ها و فراخوانی API های ویندوز لازم میشه.
مثلا زمانی که می خواهید محتویات یک آرایه طولانی را در آرایه دیگری کپی کنید توابع API می توانند اینکار رو سریعتر از ویژوال بیسیک انجام دهند، به شرطی
که آدرس حافظه مبدا و مقصد رو با VarPtr بدست بیاورید.
در ویژوال بیسیک رشته های String یک ساختار مخصوص دارند به نام BSTR که با ساختاری که در زبان هایی مثل C++ / C بکار میره متفاوته. اگر برای بدست آوردن آدرس حافظه یک متغیر رشته ای
از VarPtr استفاده کنید آدرس ساختار BSTR در حافظه بدست میاد که برای اغلب کاربرد ها بدرد نمی خوره، چون سایر زبان ها آدرس حافظه ابتدای رشته رو لازم دارند و ساختار BSTR رو نمی شناسند.
StrPtr مخصوص رشته های ویژوال بیسیک طراحی شده و آدرس ابتدای رشته رو از درون اون BSTR می خونه و بر می گردونه. به همین دلیل مواقعی که آدرس متغیر های رشته ای در حافظه را می خواهیم
از StrPtr استفاده می کنیم و از VarPtr برای سایر انواع داده ای استفاده میشه.
البته بجز VarPtr و StrPtr برای آرایه ها و نوع داده Object توابع اختصاصی دیگری هم هست که کاربرد کمتری دارند.