কি পার্থক্য 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ইউনিকোডির সংজ্ঞা দেওয়া থাকলে এর উপরি; অন্যভাবেCHARLPTSTR: এর নাল-সমাপ্ত স্ট্রিং 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 এর জন্য কোডিং না করা আপনার অ্যাপ্লিকেশনটিতে ব্যবহার করা উচিত ++ স্ট্রিংয়ের মধ্যে দুটি মাত্র রয়েছে
LPWSTRLPCWSTRবাকিগুলি এএনএসআই প্ল্যাটফর্ম বা দ্বৈত সংকলন সমর্থন করে। এগুলি আজকের মতো প্রাসঙ্গিক নয়।
std::stringকারণ এটি এখনও একটি ASCII ভিত্তিক স্ট্রিং এবং std::wstringপরিবর্তে পছন্দ করে।
*Aউইনাপি-র সংস্করণগুলি ইউটিএফ -8 কোড পৃষ্ঠার সাথে সামঞ্জস্যপূর্ণ করার জন্য কাজ করছে , হঠাৎ সেগুলি অনেক বেশি প্রাসঙ্গিক। ; পি
আপনার প্রশ্নের দ্বিতীয় অংশের উত্তর দেওয়ার জন্য আপনার পছন্দ মতো জিনিসগুলি করা দরকার
LV_DISPINFO dispinfo;
dispinfo.item.pszText = LPTSTR((LPCTSTR)string);
কারণ মাইক্রোসফট এর LVITEMstruct হয় একটি হয়েছে 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ালাই শৈলীর মিশ্রণের পরিবর্তে ব্যবহার করা হত !