কি পার্থক্য LPCSTR
, LPCTSTR
এবং LPTSTR
?
স্ট্রিংটিকে LV
/ _ITEM
স্ট্রাকচার ভেরিয়েবলে রূপান্তর করতে কেন আমাদের এটি করতে হবে pszText
:
LV_DISPINFO dispinfo;
dispinfo.item.pszText = LPTSTR((LPCTSTR)string);
কি পার্থক্য LPCSTR
, LPCTSTR
এবং LPTSTR
?
স্ট্রিংটিকে LV
/ _ITEM
স্ট্রাকচার ভেরিয়েবলে রূপান্তর করতে কেন আমাদের এটি করতে হবে pszText
:
LV_DISPINFO dispinfo;
dispinfo.item.pszText = LPTSTR((LPCTSTR)string);
উত্তর:
আপনার প্রশ্নের প্রথম অংশের উত্তর দিতে:
LPCSTR
কনস্ট্রিং স্ট্রিংয়ের পয়েন্টার (এলপি মানে লং পয়েন্টার )
LPCTSTR
একটি const TCHAR
স্ট্রিংয়ের নির্দেশক, ( TCHAR
ইউনিকোডিকে আপনার প্রকল্পে সংজ্ঞায়িত করা হয়েছে কিনা তার উপর নির্ভর করে প্রশস্ত চর বা চর হয়ে থাকে)
LPTSTR
একটি (অ-কনস্ট্যান্ট) TCHAR
স্ট্রিংয়ের পয়েন্টার
অতীতে এইগুলি সম্পর্কে কথা বলার সময় বাস্তবে, আমরা সরলতার জন্য "একটি পয়েন্টারকে" একটি বাক্যাংশ রেখেছি, তবে হালকা-রেস-ইন-অরবিট দ্বারা উল্লিখিত হিসাবে তারা সমস্ত পয়েন্টার।
এটি সি ++ স্ট্রিংগুলি বর্ণনা করে এমন একটি দুর্দান্ত কোডড্রজেক্ট নিবন্ধ (বিভিন্ন ধরণের তুলনায় চার্টের 2/3 উপায় দেখুন)
extern "C"
। এগুলি ছাড়াও, হ্যাঁ, এটি অবশ্যই "পয়েন্টার" বিট, বা একটি স্ট্রিং হিসাবে নির্দিষ্ট বর্ণনার প্রয়োজন।
দ্রুত এবং ময়লা:
LP
== এল Ong পি ointer। কেবল পয়েন্টার বা চর * ভাবেন
C
= সি onst, এই ক্ষেত্রে, আমি মনে করি তারা অক্ষরের স্ট্রিং একটি কনস্ট, পয়েন্টারটি কনস্ট না হয়ে বোঝায়।
STR
হয় স্ট্রিং
T
ব্যাপক অক্ষর বা CHAR (TCHAR) কম্পাইল অপশন উপর নির্ভর করে হয়।
char
: 8-বিট অক্ষর - অন্তর্নিহিত সি / সি ++ ডেটা টাইপCHAR
: এর নাম char
- উইন্ডোজ ডেটা টাইপLPSTR
: এর নাল-সমাপ্ত স্ট্রিং CHAR
( এল Ong পি ointer)LPCSTR
: ধ্রুব নাল-সমাপ্ত এর স্ট্রিং CHAR
( এল Ong পি ointer)wchar_t
: 16-বিট অক্ষর - অন্তর্নিহিত সি / সি ++ ডেটা টাইপWCHAR
: এর নাম wchar_t
- উইন্ডোজ ডেটা টাইপLPWSTR
: এর নাল-সমাপ্ত স্ট্রিং WCHAR
( এল Ong পি ointer)LPCWSTR
: ধ্রুব নাল-সমাপ্ত এর স্ট্রিং WCHAR
( এল Ong পি ointer)UNICODE
সংজ্ঞায়িত উপর নির্ভর করেTCHAR
: WCHAR
ইউনিকোডির সংজ্ঞা দেওয়া থাকলে এর উপরি; অন্যভাবেCHAR
LPTSTR
: এর নাল-সমাপ্ত স্ট্রিং TCHAR
( এল Ong পি ointer)LPCTSTR
: ধ্রুব নাল-সমাপ্ত এর স্ট্রিং TCHAR
( এল Ong পি ointer)সুতরাং
| Item | 8-bit | 16-bit | Varies |
|-------------------|--------------|-------------|-----------------|
| character | CHAR | WCHAR | TCHAR |
| string | LPSTR | LPWSTR | LPTSTR |
| string (const) | LPCSTR | LPCWSTR | LPCTSTR |
TCHAR
→ পাঠ্য চর ( সংরক্ষণাগার.আইস )
জন এবং টিমের উত্তর যুক্ত করা।
আপনি Win98 এর জন্য কোডিং না করা আপনার অ্যাপ্লিকেশনটিতে ব্যবহার করা উচিত ++ স্ট্রিংয়ের মধ্যে দুটি মাত্র রয়েছে
LPWSTR
LPCWSTR
বাকিগুলি এএনএসআই প্ল্যাটফর্ম বা দ্বৈত সংকলন সমর্থন করে। এগুলি আজকের মতো প্রাসঙ্গিক নয়।
std::string
কারণ এটি এখনও একটি ASCII ভিত্তিক স্ট্রিং এবং std::wstring
পরিবর্তে পছন্দ করে।
*A
উইনাপি-র সংস্করণগুলি ইউটিএফ -8 কোড পৃষ্ঠার সাথে সামঞ্জস্যপূর্ণ করার জন্য কাজ করছে , হঠাৎ সেগুলি অনেক বেশি প্রাসঙ্গিক। ; পি
আপনার প্রশ্নের দ্বিতীয় অংশের উত্তর দেওয়ার জন্য আপনার পছন্দ মতো জিনিসগুলি করা দরকার
LV_DISPINFO dispinfo;
dispinfo.item.pszText = LPTSTR((LPCTSTR)string);
কারণ মাইক্রোসফট এর LVITEM
struct হয় একটি হয়েছে LPTSTR
, অর্থাত্ একটি চপল টি-স্ট্রিং পয়েন্টার, কোনো LPCTSTR
। আপনি কি করছেন
1) string
( CString
অনুমান অনুসারে) কে একটিতে রূপান্তর করুন ( LPCTSTR
যা অনুশীলনের অর্থ এটি কেবলমাত্র পঠনযোগ্য পয়েন্টার হিসাবে তার চরিত্রের বাফারের ঠিকানা পাওয়া)
2) কেবলমাত্র পঠনযোগ্য পয়েন্টারটিকে তার const
-ness বাদ দিয়ে লেখার যোগ্য পয়েন্টারে রূপান্তর করুন ।
এটি নির্ভর করে dispinfo
যা আপনার ListView
কলটি সেই মাধ্যমে লেখার চেষ্টা শেষ করে দেবে এমন কোনও সুযোগ আছে কি না তার জন্য কী ব্যবহৃত হয় pszText
। যদি এটি হয় তবে এটি একটি সম্ভাব্য খুব খারাপ জিনিস: সর্বোপরি আপনাকে কেবল পঠনযোগ্য পয়েন্টার দেওয়া হয়েছিল এবং তারপরে এটিকে লিখনযোগ্য হিসাবে বিবেচনা করার সিদ্ধান্ত নিয়েছে: সম্ভবত এটি কেবল পঠন করার কারণ রয়েছে!
যদি আপনি এটির CString
সাথে কাজ করেন তবে আপনার কাছে ব্যবহারের বিকল্প রয়েছে string.GetBuffer()
- যা ইচ্ছাকৃতভাবে আপনাকে একটি লিখনযোগ্য দেয় LPTSTR
। তারপরে ReleaseBuffer()
স্ট্রিংটি পরিবর্তিত হয়ে গেলে আপনাকে কল করতে হবে। অথবা আপনি একটি স্থানীয় অস্থায়ী বাফার বরাদ্দ করতে এবং সেখানে স্ট্রিংটি অনুলিপি করতে পারেন।
99% সময় এটি অপ্রয়োজনীয় হবে এবং LPCTSTR
একটি হিসাবে LPTSTR
কাজ করবে হিসাবে কাজ করবে ... তবে একদিন, যখন আপনি কমপক্ষে এটি আশা করেন ...
xxx_cast<>()
পরিবর্তে সি স্টাইলের কাস্ট করা এবং ব্যবহার করা উচিত।
xxx_cast<>
দুটি পৃথক বন্ধনী ভিত্তিক ingালাই শৈলীর মিশ্রণের পরিবর্তে ব্যবহার করা হত !