Remove FX_BSTR and FX_WSTR typedefs.

These stand for const CFX_{Byte,Wide}StringC&, which is just
monumentally confusing, since there are so many string types
running around here.

The following had manual changes:
core/src/fpdfapi/fpdf_edit/fpdf_edit_content.cpp
core/src/fpdfapi/fpdf_render/fpdf_render_loadimage.cpp
core/src/fpdfdoc/doc_form.cpp
fpdfsdk/src/fpdf_ext.cpp

R=thestig@chromium.org

Review URL: https://codereview.chromium.org/1180593004.
diff --git a/core/include/fpdfapi/fpdf_objects.h b/core/include/fpdfapi/fpdf_objects.h
index 39a05c6..5a30c8b 100644
--- a/core/include/fpdfapi/fpdf_objects.h
+++ b/core/include/fpdfapi/fpdf_objects.h
@@ -144,7 +144,7 @@
         return new CPDF_Number(value);
     }
 
-    static CPDF_Number*		Create(FX_BSTR str)
+    static CPDF_Number*		Create(const CFX_ByteStringC& str)
     {
         return new CPDF_Number(str);
     }
@@ -162,13 +162,13 @@
 
     CPDF_Number(FX_FLOAT value);
 
-    CPDF_Number(FX_BSTR str);
+    CPDF_Number(const CFX_ByteStringC& str);
 
     FX_BOOL					Identical(CPDF_Number* pOther) const;
 
     CFX_ByteString			GetString() const;
 
-    void					SetString(FX_BSTR str);
+    void					SetString(const CFX_ByteStringC& str);
 
     FX_BOOL					IsInteger() const
     {
@@ -260,7 +260,7 @@
         return new CPDF_Name(str);
     }
 
-    static CPDF_Name*		Create(FX_BSTR str)
+    static CPDF_Name*		Create(const CFX_ByteStringC& str)
     {
         return new CPDF_Name(str);
     }
@@ -271,7 +271,7 @@
     }
 
     CPDF_Name(const CFX_ByteString& str) : CPDF_Object(PDFOBJ_NAME), m_Name(str) { }
-    CPDF_Name(FX_BSTR str) : CPDF_Object(PDFOBJ_NAME), m_Name(str) { }
+    CPDF_Name(const CFX_ByteStringC& str) : CPDF_Object(PDFOBJ_NAME), m_Name(str) { }
     CPDF_Name(const FX_CHAR* str) : CPDF_Object(PDFOBJ_NAME), m_Name(str) { }
 
     CFX_ByteString&			GetString()
@@ -396,95 +396,95 @@
 
     CPDF_Dictionary() : CPDF_Object(PDFOBJ_DICTIONARY) { }
 
-    CPDF_Object*			GetElement(FX_BSTR key) const;
+    CPDF_Object*			GetElement(const CFX_ByteStringC& key) const;
 
-    CPDF_Object*			GetElementValue(FX_BSTR key) const;
+    CPDF_Object*			GetElementValue(const CFX_ByteStringC& key) const;
 
 
 
 
 
-    CFX_ByteString			GetString(FX_BSTR key) const;
+    CFX_ByteString			GetString(const CFX_ByteStringC& key) const;
 
-    CFX_ByteStringC			GetConstString(FX_BSTR key) const;
+    CFX_ByteStringC			GetConstString(const CFX_ByteStringC& key) const;
 
-    CFX_ByteString			GetString(FX_BSTR key, FX_BSTR default_str) const;
+    CFX_ByteString			GetString(const CFX_ByteStringC& key, const CFX_ByteStringC& default_str) const;
 
-    CFX_ByteStringC			GetConstString(FX_BSTR key, FX_BSTR default_str) const;
+    CFX_ByteStringC			GetConstString(const CFX_ByteStringC& key, const CFX_ByteStringC& default_str) const;
 
-    CFX_WideString			GetUnicodeText(FX_BSTR key, CFX_CharMap* pCharMap = NULL) const;
+    CFX_WideString			GetUnicodeText(const CFX_ByteStringC& key, CFX_CharMap* pCharMap = NULL) const;
 
-    int						GetInteger(FX_BSTR key) const;
+    int						GetInteger(const CFX_ByteStringC& key) const;
 
-    int						GetInteger(FX_BSTR key, int default_int) const;
+    int						GetInteger(const CFX_ByteStringC& key, int default_int) const;
 
-    FX_BOOL					GetBoolean(FX_BSTR key, FX_BOOL bDefault = FALSE) const;
+    FX_BOOL					GetBoolean(const CFX_ByteStringC& key, FX_BOOL bDefault = FALSE) const;
 
-    FX_FLOAT				GetNumber(FX_BSTR key) const;
+    FX_FLOAT				GetNumber(const CFX_ByteStringC& key) const;
 
-    CPDF_Dictionary*		GetDict(FX_BSTR key) const;
+    CPDF_Dictionary*		GetDict(const CFX_ByteStringC& key) const;
 
-    CPDF_Stream*			GetStream(FX_BSTR key) const;
+    CPDF_Stream*			GetStream(const CFX_ByteStringC& key) const;
 
-    CPDF_Array*				GetArray(FX_BSTR key) const;
+    CPDF_Array*				GetArray(const CFX_ByteStringC& key) const;
 
-    CFX_FloatRect			GetRect(FX_BSTR key) const;
+    CFX_FloatRect			GetRect(const CFX_ByteStringC& key) const;
 
-    CFX_AffineMatrix		GetMatrix(FX_BSTR key) const;
+    CFX_AffineMatrix		GetMatrix(const CFX_ByteStringC& key) const;
 
-    FX_FLOAT				GetFloat(FX_BSTR key) const
+    FX_FLOAT				GetFloat(const CFX_ByteStringC& key) const
     {
         return GetNumber(key);
     }
 
 
-    FX_BOOL					KeyExist(FX_BSTR key) const;
+    FX_BOOL					KeyExist(const CFX_ByteStringC& key) const;
 
     FX_POSITION				GetStartPos() const;
 
     CPDF_Object*			GetNextElement(FX_POSITION& pos, CFX_ByteString& key) const;
 
-    void					SetAt(FX_BSTR key, CPDF_Object* pObj, CPDF_IndirectObjects* pObjs = NULL);
+    void					SetAt(const CFX_ByteStringC& key, CPDF_Object* pObj, CPDF_IndirectObjects* pObjs = NULL);
 
 
 
-    void					SetAtName(FX_BSTR key, const CFX_ByteString& name);
+    void					SetAtName(const CFX_ByteStringC& key, const CFX_ByteString& name);
 
 
-    void					SetAtString(FX_BSTR key, const CFX_ByteString& string);
+    void					SetAtString(const CFX_ByteStringC& key, const CFX_ByteString& string);
 
 
-    void					SetAtInteger(FX_BSTR key, int i);
+    void					SetAtInteger(const CFX_ByteStringC& key, int i);
 
 
-    void					SetAtNumber(FX_BSTR key, FX_FLOAT f);
+    void					SetAtNumber(const CFX_ByteStringC& key, FX_FLOAT f);
 
-    void					SetAtReference(FX_BSTR key, CPDF_IndirectObjects* pDoc, FX_DWORD objnum);
+    void					SetAtReference(const CFX_ByteStringC& key, CPDF_IndirectObjects* pDoc, FX_DWORD objnum);
 
-    void					SetAtReference(FX_BSTR key, CPDF_IndirectObjects* pDoc, CPDF_Object* obj)
+    void					SetAtReference(const CFX_ByteStringC& key, CPDF_IndirectObjects* pDoc, CPDF_Object* obj)
     {
         SetAtReference(key, pDoc, obj->GetObjNum());
     }
 
-    void					AddReference(FX_BSTR key, CPDF_IndirectObjects* pDoc, FX_DWORD objnum);
+    void					AddReference(const CFX_ByteStringC& key, CPDF_IndirectObjects* pDoc, FX_DWORD objnum);
 
-    void					AddReference(FX_BSTR key, CPDF_IndirectObjects* pDoc, CPDF_Object* obj)
+    void					AddReference(const CFX_ByteStringC& key, CPDF_IndirectObjects* pDoc, CPDF_Object* obj)
     {
         AddReference(key, pDoc, obj->GetObjNum());
     }
 
-    void					SetAtRect(FX_BSTR key, const CFX_FloatRect& rect);
+    void					SetAtRect(const CFX_ByteStringC& key, const CFX_FloatRect& rect);
 
-    void					SetAtMatrix(FX_BSTR key, const CFX_AffineMatrix& matrix);
+    void					SetAtMatrix(const CFX_ByteStringC& key, const CFX_AffineMatrix& matrix);
 
-    void					SetAtBoolean(FX_BSTR key, FX_BOOL bValue);
+    void					SetAtBoolean(const CFX_ByteStringC& key, FX_BOOL bValue);
 
 
 
-    void					RemoveAt(FX_BSTR key);
+    void					RemoveAt(const CFX_ByteStringC& key);
 
 
-    void					ReplaceKey(FX_BSTR oldkey, FX_BSTR newkey);
+    void					ReplaceKey(const CFX_ByteStringC& oldkey, const CFX_ByteStringC& newkey);
 
     FX_BOOL					Identical(CPDF_Dictionary* pDict) const;
 
@@ -493,7 +493,7 @@
         return m_Map.GetCount();
     }
 
-    void					AddValue(FX_BSTR key, CPDF_Object* pObj);
+    void					AddValue(const CFX_ByteStringC& key, CPDF_Object* pObj);
 protected:
 
     ~CPDF_Dictionary();
@@ -622,7 +622,7 @@
 
     uint8_t*				m_pSrcData;
 };
-CFX_DataFilter* FPDF_CreateFilter(FX_BSTR name, const CPDF_Dictionary* pParam, int width = 0, int height = 0);
+CFX_DataFilter* FPDF_CreateFilter(const CFX_ByteStringC& name, const CPDF_Dictionary* pParam, int width = 0, int height = 0);
 #define FPDF_FILTER_BUFFER_SIZE		20480
 class CPDF_StreamFilter 
 {
diff --git a/core/include/fpdfapi/fpdf_page.h b/core/include/fpdfapi/fpdf_page.h
index 867f002..959ed13 100644
--- a/core/include/fpdfapi/fpdf_page.h
+++ b/core/include/fpdfapi/fpdf_page.h
@@ -173,7 +173,7 @@
         return m_PageMatrix;
     }
 
-    CPDF_Object*		GetPageAttr(FX_BSTR name) const;
+    CPDF_Object*		GetPageAttr(const CFX_ByteStringC& name) const;
 
 
 
diff --git a/core/include/fpdfapi/fpdf_pageobj.h b/core/include/fpdfapi/fpdf_pageobj.h
index e09c045..340c8d3 100644
--- a/core/include/fpdfapi/fpdf_pageobj.h
+++ b/core/include/fpdfapi/fpdf_pageobj.h
@@ -274,7 +274,7 @@
     CPDF_GeneralStateData(const CPDF_GeneralStateData& src);
     ~CPDF_GeneralStateData();
 
-    void				SetBlendMode(FX_BSTR blend_mode);
+    void				SetBlendMode(const CFX_ByteStringC& blend_mode);
 
     char				m_BlendMode[16];
 
@@ -422,9 +422,9 @@
         return m_pObject ? m_pObject->GetMCID() : -1;
     }
 
-    FX_BOOL				HasMark(FX_BSTR mark) const;
+    FX_BOOL				HasMark(const CFX_ByteStringC& mark) const;
 
-    FX_BOOL				LookupMark(FX_BSTR mark, CPDF_Dictionary*& pDict) const;
+    FX_BOOL				LookupMark(const CFX_ByteStringC& mark, CPDF_Dictionary*& pDict) const;
 };
 #define PDFPAGE_TEXT		1
 #define PDFPAGE_PATH		2
diff --git a/core/include/fpdfapi/fpdf_parser.h b/core/include/fpdfapi/fpdf_parser.h
index cdd7aaa..f579527 100644
--- a/core/include/fpdfapi/fpdf_parser.h
+++ b/core/include/fpdfapi/fpdf_parser.h
@@ -204,18 +204,18 @@
 
     CPDF_SimpleParser(const uint8_t* pData, FX_DWORD dwSize);
 
-    CPDF_SimpleParser(FX_BSTR str);
+    CPDF_SimpleParser(const CFX_ByteStringC& str);
 
     CFX_ByteStringC		GetWord();
 
-    FX_BOOL				SearchToken(FX_BSTR token);
+    FX_BOOL				SearchToken(const CFX_ByteStringC& token);
 
-    FX_BOOL				SkipWord(FX_BSTR token);
+    FX_BOOL				SkipWord(const CFX_ByteStringC& token);
 
-    FX_BOOL				FindTagPair(FX_BSTR start_token, FX_BSTR end_token,
+    FX_BOOL				FindTagPair(const CFX_ByteStringC& start_token, const CFX_ByteStringC& end_token,
                                     FX_DWORD& start_pos, FX_DWORD& end_pos);
 
-    FX_BOOL				FindTagParam(FX_BSTR token, int nParams);
+    FX_BOOL				FindTagParam(const CFX_ByteStringC& token, int nParams);
 
     FX_DWORD			GetPos()
     {
@@ -275,11 +275,11 @@
 
     void				ToNextWord();
 
-    FX_BOOL				SearchWord(FX_BSTR word, FX_BOOL bWholeWord, FX_BOOL bForward, FX_FILESIZE limit);
+    FX_BOOL				SearchWord(const CFX_ByteStringC& word, FX_BOOL bWholeWord, FX_BOOL bForward, FX_FILESIZE limit);
 
-    int					SearchMultiWord(FX_BSTR words, FX_BOOL bWholeWord, FX_FILESIZE limit);
+    int					SearchMultiWord(const CFX_ByteStringC& words, FX_BOOL bWholeWord, FX_FILESIZE limit);
 
-    FX_FILESIZE			FindTag(FX_BSTR tag, FX_FILESIZE limit);
+    FX_FILESIZE			FindTag(const CFX_ByteStringC& tag, FX_FILESIZE limit);
 
     void				SetEncrypt(CPDF_CryptoHandler* pCryptoHandler)
     {
@@ -756,7 +756,7 @@
 
 #define CPDF_Rect		CFX_FloatRect
 #define CPDF_Matrix		CFX_AffineMatrix
-CFX_ByteString PDF_NameDecode(FX_BSTR orig);
+CFX_ByteString PDF_NameDecode(const CFX_ByteStringC& orig);
 CFX_ByteString PDF_NameDecode(const CFX_ByteString& orig);
 CFX_ByteString PDF_NameEncode(const CFX_ByteString& orig);
 CFX_ByteString PDF_EncodeString(const CFX_ByteString& src, FX_BOOL bHex = FALSE);
diff --git a/core/include/fpdfapi/fpdf_resource.h b/core/include/fpdfapi/fpdf_resource.h
index 501e3be..d49ed4e 100644
--- a/core/include/fpdfapi/fpdf_resource.h
+++ b/core/include/fpdfapi/fpdf_resource.h
@@ -72,7 +72,7 @@
 {
 public:
     static CPDF_Font*		CreateFontF(CPDF_Document* pDoc, CPDF_Dictionary* pFontDict);
-    static CPDF_Font*		GetStockFont(CPDF_Document* pDoc, FX_BSTR fontname);
+    static CPDF_Font*		GetStockFont(CPDF_Document* pDoc, const CFX_ByteStringC& fontname);
 
     virtual ~CPDF_Font();
 
diff --git a/core/include/fpdfdoc/fpdf_doc.h b/core/include/fpdfdoc/fpdf_doc.h
index 67b799d..cb91b96 100644
--- a/core/include/fpdfdoc/fpdf_doc.h
+++ b/core/include/fpdfdoc/fpdf_doc.h
@@ -49,13 +49,13 @@
         m_pRoot = pRoot;
     }
 
-    CPDF_NameTree(CPDF_Document* pDoc, FX_BSTR category);
+    CPDF_NameTree(CPDF_Document* pDoc, const CFX_ByteStringC& category);
 
     CPDF_Object*		LookupValue(int nIndex, CFX_ByteString& csName) const;
 
     CPDF_Object*		LookupValue(const CFX_ByteString& csName) const;
 
-    CPDF_Array*			LookupNamedDest(CPDF_Document* pDoc, FX_BSTR sName);
+    CPDF_Array*			LookupNamedDest(CPDF_Document* pDoc, const CFX_ByteStringC& sName);
 
     int					GetIndex(const CFX_ByteString& csName) const;
 
@@ -167,7 +167,7 @@
     void			ResetOCContext();
 protected:
 
-    FX_BOOL			LoadOCGStateFromConfig(FX_BSTR csConfig, const CPDF_Dictionary *pOCGDict, FX_BOOL &bValidConfig) const;
+    FX_BOOL			LoadOCGStateFromConfig(const CFX_ByteStringC& csConfig, const CPDF_Dictionary *pOCGDict, FX_BOOL &bValidConfig) const;
 
     FX_BOOL			LoadOCGState(const CPDF_Dictionary *pOCGDict) const;
 
@@ -459,7 +459,7 @@
 
     CPDF_Stream*	GetFileStream() const;
 
-    void			SetFileName(FX_WSTR wsFileName, FX_BOOL bURL = FALSE);
+    void			SetFileName(const CFX_WideStringC& wsFileName, FX_BOOL bURL = FALSE);
 protected:
 
     CPDF_Object		*m_pObj;
@@ -882,9 +882,9 @@
 
     CPDF_FormField*			CheckRequiredFields(const CFX_PtrArray *fields = NULL, FX_BOOL bIncludeOrExclude = TRUE) const;
 
-    CFDF_Document* 			ExportToFDF(FX_WSTR pdf_path, FX_BOOL bSimpleFileSpec = FALSE) const;
+    CFDF_Document* 			ExportToFDF(const CFX_WideStringC& pdf_path, FX_BOOL bSimpleFileSpec = FALSE) const;
 
-    CFDF_Document*			ExportToFDF(FX_WSTR pdf_path, CFX_PtrArray& fields, FX_BOOL bIncludeOrExclude = TRUE, FX_BOOL bSimpleFileSpec = FALSE) const;
+    CFDF_Document*			ExportToFDF(const CFX_WideStringC& pdf_path, CFX_PtrArray& fields, FX_BOOL bIncludeOrExclude = TRUE, FX_BOOL bSimpleFileSpec = FALSE) const;
 
     FX_BOOL					ImportFromFDF(const CFDF_Document* pFDFDoc, FX_BOOL bNotify = FALSE);
 
@@ -1518,10 +1518,10 @@
 
     CFX_WideString					GetLabel(int nPage) const;
 
-    int32_t						GetPageByLabel(FX_BSTR bsLabel) const;
+    int32_t						GetPageByLabel(const CFX_ByteStringC& bsLabel) const;
 
 
-    int32_t						GetPageByLabel(FX_WSTR wsLabel) const;
+    int32_t						GetPageByLabel(const CFX_WideStringC& wsLabel) const;
 
 protected:
     CPDF_Document*					m_pDocument;
@@ -1538,7 +1538,7 @@
     void				LoadDoc(CPDF_Document *pDoc);
 
 
-    int32_t			GetString(FX_BSTR bsItem, CFX_WideString &wsStr);
+    int32_t			GetString(const CFX_ByteStringC& bsItem, CFX_WideString &wsStr);
 
     CXML_Element*		GetRoot() const;
 
@@ -1584,7 +1584,7 @@
         return m_pDict;
     }
 
-    FX_BOOL					HasMKEntry(FX_BSTR csEntry);
+    FX_BOOL					HasMKEntry(const CFX_ByteStringC& csEntry);
 
 
 
@@ -1687,15 +1687,15 @@
     CPDF_Dictionary*		m_pDict;
 protected:
 
-    FX_ARGB					GetColor(int& iColorType, FX_BSTR csEntry);
+    FX_ARGB					GetColor(int& iColorType, const CFX_ByteStringC& csEntry);
 
-    FX_FLOAT				GetOriginalColor(int index, FX_BSTR csEntry);
+    FX_FLOAT				GetOriginalColor(int index, const CFX_ByteStringC& csEntry);
 
-    void					GetOriginalColor(int& iColorType, FX_FLOAT fc[4], FX_BSTR csEntry);
+    void					GetOriginalColor(int& iColorType, FX_FLOAT fc[4], const CFX_ByteStringC& csEntry);
 
-    CFX_WideString			GetCaption(FX_BSTR csEntry);
+    CFX_WideString			GetCaption(const CFX_ByteStringC& csEntry);
 
-    CPDF_Stream*			GetIcon(FX_BSTR csEntry);
+    CPDF_Stream*			GetIcon(const CFX_ByteStringC& csEntry);
     friend class			CPDF_FormControl;
 };
 
diff --git a/core/include/fpdfdoc/fpdf_tagged.h b/core/include/fpdfdoc/fpdf_tagged.h
index 4943ad0..58f613b 100644
--- a/core/include/fpdfdoc/fpdf_tagged.h
+++ b/core/include/fpdfdoc/fpdf_tagged.h
@@ -85,17 +85,17 @@
 
     virtual CFX_PtrArray*		GetObjectArray() = 0;
 
-    virtual CPDF_Object*		GetAttr(FX_BSTR owner, FX_BSTR name, FX_BOOL bInheritable = FALSE, FX_FLOAT fLevel = 0.0F) = 0;
+    virtual CPDF_Object*		GetAttr(const CFX_ByteStringC& owner, const CFX_ByteStringC& name, FX_BOOL bInheritable = FALSE, FX_FLOAT fLevel = 0.0F) = 0;
 
 
 
-    virtual CFX_ByteString		GetName(FX_BSTR owner, FX_BSTR name, FX_BSTR default_value, FX_BOOL bInheritable = FALSE, int subindex = -1) = 0;
+    virtual CFX_ByteString		GetName(const CFX_ByteStringC& owner, const CFX_ByteStringC& name, const CFX_ByteStringC& default_value, FX_BOOL bInheritable = FALSE, int subindex = -1) = 0;
 
-    virtual FX_ARGB				GetColor(FX_BSTR owner, FX_BSTR name, FX_ARGB default_value, FX_BOOL bInheritable = FALSE, int subindex = -1) = 0;
+    virtual FX_ARGB				GetColor(const CFX_ByteStringC& owner, const CFX_ByteStringC& name, FX_ARGB default_value, FX_BOOL bInheritable = FALSE, int subindex = -1) = 0;
 
-    virtual FX_FLOAT			GetNumber(FX_BSTR owner, FX_BSTR name, FX_FLOAT default_value, FX_BOOL bInheritable = FALSE, int subindex = -1) = 0;
+    virtual FX_FLOAT			GetNumber(const CFX_ByteStringC& owner, const CFX_ByteStringC& name, FX_FLOAT default_value, FX_BOOL bInheritable = FALSE, int subindex = -1) = 0;
 
-    virtual int					GetInteger(FX_BSTR owner, FX_BSTR name, int default_value, FX_BOOL bInheritable = FALSE, int subindex = -1) = 0;
+    virtual int					GetInteger(const CFX_ByteStringC& owner, const CFX_ByteStringC& name, int default_value, FX_BOOL bInheritable = FALSE, int subindex = -1) = 0;
 
 };
 
diff --git a/core/include/fxcrt/fx_basic.h b/core/include/fxcrt/fx_basic.h
index 004b018..df36c26 100644
--- a/core/include/fxcrt/fx_basic.h
+++ b/core/include/fxcrt/fx_basic.h
@@ -43,7 +43,7 @@
 
     void					AppendFill(uint8_t byte, FX_STRSIZE count);
 
-    void					AppendString(FX_BSTR str)
+    void					AppendString(const CFX_ByteStringC& str)
     {
         AppendBlock(str.GetPtr(), str.GetLength());
     }
@@ -95,7 +95,7 @@
 {
 public:
 
-    void					operator = (FX_BSTR str);
+    void					operator = (const CFX_ByteStringC& str);
 
     void					AppendChar(int ch)
     {
@@ -108,7 +108,7 @@
 
     CFX_ByteTextBuf&		operator << (double f);
 
-    CFX_ByteTextBuf&		operator << (FX_BSTR lpsz);
+    CFX_ByteTextBuf&		operator << (const CFX_ByteStringC& lpsz);
 
     CFX_ByteTextBuf&		operator << (const CFX_ByteTextBuf& buf);
 
@@ -123,7 +123,7 @@
 
     void					operator = (const FX_WCHAR* lpsz);
 
-    void					operator = (FX_WSTR str);
+    void					operator = (const CFX_WideStringC& str);
 
     void					AppendChar(FX_WCHAR wch);
 
@@ -133,7 +133,7 @@
 
     CFX_WideTextBuf&		operator << (const FX_WCHAR* lpsz);
 
-    CFX_WideTextBuf&		operator << (FX_WSTR str);
+    CFX_WideTextBuf&		operator << (const CFX_WideStringC& str);
     CFX_WideTextBuf&		operator << (const CFX_WideString &str);
 
     CFX_WideTextBuf&		operator << (const CFX_WideTextBuf& buf);
@@ -170,7 +170,7 @@
 
     CFX_ArchiveSaver&		operator << (double i);
 
-    CFX_ArchiveSaver&		operator << (FX_BSTR bstr);
+    CFX_ArchiveSaver&		operator << (const CFX_ByteStringC& bstr);
 
     CFX_ArchiveSaver&		operator << (const FX_WCHAR* bstr);
 
@@ -248,7 +248,7 @@
     int32_t				AppendDWord(FX_DWORD i);
 
 
-    int32_t				AppendString(FX_BSTR lpsz);
+    int32_t				AppendString(const CFX_ByteStringC& lpsz);
 
 protected:
 
@@ -332,7 +332,7 @@
 
     void			Input(FX_WCHAR unicode);
 
-    void			AppendStr(FX_BSTR str)
+    void			AppendStr(const CFX_ByteStringC& str)
     {
         m_UTF16First = 0;
         m_Buffer << str;
@@ -934,16 +934,16 @@
         return m_nCount == 0;
     }
 
-    FX_BOOL Lookup(FX_BSTR key, void*& rValue) const;
+    FX_BOOL Lookup(const CFX_ByteStringC& key, void*& rValue) const;
 
-    void*& operator[](FX_BSTR key);
+    void*& operator[](const CFX_ByteStringC& key);
 
-    void SetAt(FX_BSTR key, void* newValue)
+    void SetAt(const CFX_ByteStringC& key, void* newValue)
     {
         (*this)[key] = newValue;
     }
 
-    FX_BOOL RemoveKey(FX_BSTR key);
+    FX_BOOL RemoveKey(const CFX_ByteStringC& key);
 
     void RemoveAll();
 
@@ -963,7 +963,7 @@
 
     void InitHashTable(FX_DWORD hashSize, FX_BOOL bAllocNow = TRUE);
 
-    FX_DWORD HashKey(FX_BSTR key) const;
+    FX_DWORD HashKey(const CFX_ByteStringC& key) const;
 protected:
 
     CAssoc** m_pHashTable;
@@ -982,7 +982,7 @@
 
     void FreeAssoc(CAssoc* pAssoc);
 
-    CAssoc* GetAssocAt(FX_BSTR key, FX_DWORD& hash) const;
+    CAssoc* GetAssocAt(const CFX_ByteStringC& key, FX_DWORD& hash) const;
 public:
 
     ~CFX_MapByteStringToPtr();
@@ -1002,15 +1002,15 @@
 
     void*		GetNextValue(FX_POSITION& rNextPosition) const;
 
-    FX_BOOL			Lookup(FX_BSTR key, void*& rValue) const;
+    FX_BOOL			Lookup(const CFX_ByteStringC& key, void*& rValue) const;
 
-    void			SetAt(FX_BSTR key, void* value);
+    void			SetAt(const CFX_ByteStringC& key, void* value);
 
-    void			RemoveKey(FX_BSTR key);
+    void			RemoveKey(const CFX_ByteStringC& key);
 
     int				GetCount() const;
 
-    void			AddValue(FX_BSTR key, void* pValue);
+    void			AddValue(const CFX_ByteStringC& key, void* pValue);
 private:
 
     CFX_BaseSegmentedArray			m_Buffer;
diff --git a/core/include/fxcrt/fx_stream.h b/core/include/fxcrt/fx_stream.h
index 44f911d..4099bef 100644
--- a/core/include/fxcrt/fx_stream.h
+++ b/core/include/fxcrt/fx_stream.h
@@ -44,8 +44,8 @@
 #define FX_FILEMODE_Write		0
 #define FX_FILEMODE_ReadOnly	1
 #define FX_FILEMODE_Truncate	2
-FX_HFILE	FX_File_Open(FX_BSTR fileName, FX_DWORD dwMode);
-FX_HFILE	FX_File_Open(FX_WSTR fileName, FX_DWORD dwMode);
+FX_HFILE	FX_File_Open(const CFX_ByteStringC& fileName, FX_DWORD dwMode);
+FX_HFILE	FX_File_Open(const CFX_WideStringC& fileName, FX_DWORD dwMode);
 void		FX_File_Close(FX_HFILE hFile);
 FX_FILESIZE	FX_File_GetSize(FX_HFILE hFile);
 FX_FILESIZE	FX_File_GetPosition(FX_HFILE hFile);
@@ -56,14 +56,14 @@
 size_t		FX_File_WritePos(FX_HFILE hFile, const void* pBuffer, size_t szBuffer, FX_FILESIZE pos);
 FX_BOOL		FX_File_Flush(FX_HFILE hFile);
 FX_BOOL		FX_File_Truncate(FX_HFILE hFile, FX_FILESIZE szFile);
-FX_BOOL		FX_File_Exist(FX_BSTR fileName);
-FX_BOOL		FX_File_Exist(FX_WSTR fileName);
-FX_BOOL		FX_File_Delete(FX_BSTR fileName);
-FX_BOOL		FX_File_Delete(FX_WSTR fileName);
-FX_BOOL		FX_File_Copy(FX_BSTR fileNameSrc, FX_BSTR fileNameDst);
-FX_BOOL		FX_File_Copy(FX_WSTR fileNameSrc, FX_WSTR fileNameDst);
-FX_BOOL		FX_File_Move(FX_BSTR fileNameSrc, FX_BSTR fileNameDst);
-FX_BOOL		FX_File_Move(FX_WSTR fileNameSrc, FX_WSTR fileNameDst);
+FX_BOOL		FX_File_Exist(const CFX_ByteStringC& fileName);
+FX_BOOL		FX_File_Exist(const CFX_WideStringC& fileName);
+FX_BOOL		FX_File_Delete(const CFX_ByteStringC& fileName);
+FX_BOOL		FX_File_Delete(const CFX_WideStringC& fileName);
+FX_BOOL		FX_File_Copy(const CFX_ByteStringC& fileNameSrc, const CFX_ByteStringC& fileNameDst);
+FX_BOOL		FX_File_Copy(const CFX_WideStringC& fileNameSrc, const CFX_WideStringC& fileNameDst);
+FX_BOOL		FX_File_Move(const CFX_ByteStringC& fileNameSrc, const CFX_ByteStringC& fileNameDst);
+FX_BOOL		FX_File_Move(const CFX_WideStringC& fileNameSrc, const CFX_WideStringC& fileNameDst);
 class IFX_StreamWrite
 {
 public:
diff --git a/core/include/fxcrt/fx_string.h b/core/include/fxcrt/fx_string.h
index 5923ffd..4ce8b81 100644
--- a/core/include/fxcrt/fx_string.h
+++ b/core/include/fxcrt/fx_string.h
@@ -167,7 +167,6 @@
 inline bool operator!= (const char* lhs, const CFX_ByteStringC& rhs) {
     return rhs != lhs;
 }
-typedef const CFX_ByteStringC& FX_BSTR;
 #define FX_BSTRC(str) CFX_ByteStringC(str, sizeof str-1)
 #define FXBSTR_ID(c1, c2, c3, c4) ((c1 << 24) | (c2 << 16) | (c3 << 8) | (c4))
 
@@ -196,8 +195,8 @@
     CFX_ByteString(const FX_CHAR* ptr, FX_STRSIZE len);
     CFX_ByteString(const uint8_t* ptr, FX_STRSIZE len);
 
-    CFX_ByteString(FX_BSTR bstrc);
-    CFX_ByteString(FX_BSTR bstrc1, FX_BSTR bstrc2);
+    CFX_ByteString(const CFX_ByteStringC& bstrc);
+    CFX_ByteString(const CFX_ByteStringC& bstrc1, const CFX_ByteStringC& bstrc2);
 
     ~CFX_ByteString();
 
@@ -232,14 +231,14 @@
         return !GetLength();
     }
 
-    int						Compare(FX_BSTR str) const;
+    int						Compare(const CFX_ByteStringC& str) const;
 
 
     bool Equal(const char* ptr) const;
     bool Equal(const CFX_ByteStringC& str) const;
     bool Equal(const CFX_ByteString& other) const;
 
-    bool EqualNoCase(FX_BSTR str) const;
+    bool EqualNoCase(const CFX_ByteStringC& str) const;
 
     bool operator== (const char* ptr) const { return Equal(ptr); }
     bool operator== (const CFX_ByteStringC& str) const { return Equal(str); }
@@ -263,7 +262,7 @@
 
     const CFX_ByteString&	operator = (const FX_CHAR* str);
 
-    const CFX_ByteString&	operator = (FX_BSTR bstrc);
+    const CFX_ByteString&	operator = (const CFX_ByteStringC& bstrc);
 
     const CFX_ByteString&	operator = (const CFX_ByteString& stringSrc);
 
@@ -277,7 +276,7 @@
 
     const CFX_ByteString&	operator += (const CFX_ByteString& str);
 
-    const CFX_ByteString&	operator += (FX_BSTR bstrc);
+    const CFX_ByteString&	operator += (const CFX_ByteStringC& bstrc);
 
     uint8_t					GetAt(FX_STRSIZE nIndex) const
     {
@@ -315,7 +314,7 @@
 
     CFX_ByteString			Right(FX_STRSIZE count) const;
 
-    FX_STRSIZE				Find(FX_BSTR lpszSub, FX_STRSIZE start = 0) const;
+    FX_STRSIZE				Find(const CFX_ByteStringC& lpszSub, FX_STRSIZE start = 0) const;
 
     FX_STRSIZE				Find(FX_CHAR ch, FX_STRSIZE start = 0) const;
 
@@ -329,15 +328,15 @@
 
     void					TrimRight(FX_CHAR chTarget);
 
-    void					TrimRight(FX_BSTR lpszTargets);
+    void					TrimRight(const CFX_ByteStringC& lpszTargets);
 
     void					TrimLeft();
 
     void					TrimLeft(FX_CHAR chTarget);
 
-    void					TrimLeft(FX_BSTR lpszTargets);
+    void					TrimLeft(const CFX_ByteStringC& lpszTargets);
 
-    FX_STRSIZE				Replace(FX_BSTR lpszOld, FX_BSTR lpszNew);
+    FX_STRSIZE				Replace(const CFX_ByteStringC& lpszOld, const CFX_ByteStringC& lpszNew);
 
     FX_STRSIZE				Remove(FX_CHAR ch);
 
@@ -418,23 +417,23 @@
     return rhs != lhs;
 }
 
-inline CFX_ByteString operator + (FX_BSTR str1, FX_BSTR str2)
+inline CFX_ByteString operator + (const CFX_ByteStringC& str1, const CFX_ByteStringC& str2)
 {
     return CFX_ByteString(str1, str2);
 }
-inline CFX_ByteString operator + (FX_BSTR str1, const FX_CHAR* str2)
+inline CFX_ByteString operator + (const CFX_ByteStringC& str1, const FX_CHAR* str2)
 {
     return CFX_ByteString(str1, str2);
 }
-inline CFX_ByteString operator + (const FX_CHAR* str1, FX_BSTR str2)
+inline CFX_ByteString operator + (const FX_CHAR* str1, const CFX_ByteStringC& str2)
 {
     return CFX_ByteString(str1, str2);
 }
-inline CFX_ByteString operator + (FX_BSTR str1, FX_CHAR ch)
+inline CFX_ByteString operator + (const CFX_ByteStringC& str1, FX_CHAR ch)
 {
     return CFX_ByteString(str1, CFX_ByteStringC(ch));
 }
-inline CFX_ByteString operator + (FX_CHAR ch, FX_BSTR str2)
+inline CFX_ByteString operator + (FX_CHAR ch, const CFX_ByteStringC& str2)
 {
     return CFX_ByteString(ch, str2);
 }
@@ -458,11 +457,11 @@
 {
     return CFX_ByteString(str1, str2);
 }
-inline CFX_ByteString operator + (const CFX_ByteString& str1, FX_BSTR str2)
+inline CFX_ByteString operator + (const CFX_ByteString& str1, const CFX_ByteStringC& str2)
 {
     return CFX_ByteString(str1, str2);
 }
-inline CFX_ByteString operator + (FX_BSTR str1, const CFX_ByteString& str2)
+inline CFX_ByteString operator + (const CFX_ByteStringC& str1, const CFX_ByteString& str2)
 {
     return CFX_ByteString(str1, str2);
 }
@@ -615,7 +614,6 @@
 inline bool operator!= (const wchar_t* lhs, const CFX_WideStringC& rhs) {
     return rhs != lhs;
 }
-typedef const CFX_WideStringC&	FX_WSTR;
 #define FX_WSTRC(wstr) CFX_WideStringC(wstr, FX_ArraySize(wstr) - 1)
 
 // A mutable string with shared buffers using copy-on-write semantics that
@@ -896,11 +894,11 @@
 inline bool operator!= (const CFX_WideStringC& lhs, const CFX_WideString& rhs) {
     return rhs != lhs;
 }
-FX_FLOAT FX_atof(FX_BSTR str);
-void FX_atonum(FX_BSTR str, FX_BOOL& bInteger, void* pData);
+FX_FLOAT FX_atof(const CFX_ByteStringC& str);
+void FX_atonum(const CFX_ByteStringC& str, FX_BOOL& bInteger, void* pData);
 FX_STRSIZE FX_ftoa(FX_FLOAT f, FX_CHAR* buf);
 CFX_ByteString	FX_UTF8Encode(const FX_WCHAR* pwsStr, FX_STRSIZE len);
-inline CFX_ByteString	FX_UTF8Encode(FX_WSTR wsStr)
+inline CFX_ByteString	FX_UTF8Encode(const CFX_WideStringC& wsStr)
 {
     return FX_UTF8Encode(wsStr.GetPtr(), wsStr.GetLength());
 }
diff --git a/core/include/fxcrt/fx_xml.h b/core/include/fxcrt/fx_xml.h
index b2fb24c..fb24f61 100644
--- a/core/include/fxcrt/fx_xml.h
+++ b/core/include/fxcrt/fx_xml.h
@@ -27,9 +27,9 @@
     {
         RemoveAll();
     }
-    const CFX_WideString*	Lookup(FX_BSTR space, FX_BSTR name) const;
-    void					SetAt(FX_BSTR space, FX_BSTR name, FX_WSTR value);
-    void					RemoveAt(FX_BSTR space, FX_BSTR name);
+    const CFX_WideString*	Lookup(const CFX_ByteStringC& space, const CFX_ByteStringC& name) const;
+    void					SetAt(const CFX_ByteStringC& space, const CFX_ByteStringC& name, const CFX_WideStringC& value);
+    void					RemoveAt(const CFX_ByteStringC& space, const CFX_ByteStringC& name);
     void					RemoveAll();
     int						GetSize() const;
     CXML_AttrItem&			GetAt(int index) const;
@@ -39,7 +39,7 @@
 {
 public:
     CXML_Content() : m_bCDATA(FALSE), m_Content() {}
-    void	Set(FX_BOOL bCDATA, FX_WSTR content)
+    void	Set(FX_BOOL bCDATA, const CFX_WideStringC& content)
     {
         m_bCDATA = bCDATA;
         m_Content = content;
@@ -53,8 +53,8 @@
     static CXML_Element*	Parse(const void* pBuffer, size_t size, FX_BOOL bSaveSpaceChars = FALSE, FX_FILESIZE* pParsedSize = NULL);
     static CXML_Element*	Parse(IFX_FileRead *pFile, FX_BOOL bSaveSpaceChars = FALSE, FX_FILESIZE* pParsedSize = NULL);
     static CXML_Element*	Parse(IFX_BufferRead *pBuffer, FX_BOOL bSaveSpaceChars = FALSE, FX_FILESIZE* pParsedSize = NULL);
-    CXML_Element(FX_BSTR qSpace, FX_BSTR tagName);
-    CXML_Element(FX_BSTR qTagName);
+    CXML_Element(const CFX_ByteStringC& qSpace, const CFX_ByteStringC& tagName);
+    CXML_Element(const CFX_ByteStringC& qTagName);
     CXML_Element();
 
     ~CXML_Element();
@@ -67,7 +67,7 @@
 
     CFX_ByteString			GetNamespace(FX_BOOL bQualified = FALSE) const;
 
-    CFX_ByteString			GetNamespaceURI(FX_BSTR qName) const;
+    CFX_ByteString			GetNamespaceURI(const CFX_ByteStringC& qName) const;
 
     CXML_Element*			GetParent() const
     {
@@ -81,50 +81,50 @@
 
     void					GetAttrByIndex(int index, CFX_ByteString &space, CFX_ByteString &name, CFX_WideString &value) const;
 
-    FX_BOOL					HasAttr(FX_BSTR qName) const;
+    FX_BOOL					HasAttr(const CFX_ByteStringC& qName) const;
 
-    FX_BOOL					GetAttrValue(FX_BSTR name, CFX_WideString& attribute) const;
-    CFX_WideString			GetAttrValue(FX_BSTR name) const
+    FX_BOOL					GetAttrValue(const CFX_ByteStringC& name, CFX_WideString& attribute) const;
+    CFX_WideString			GetAttrValue(const CFX_ByteStringC& name) const
     {
         CFX_WideString attr;
         GetAttrValue(name, attr);
         return attr;
     }
 
-    FX_BOOL					GetAttrValue(FX_BSTR space, FX_BSTR name, CFX_WideString& attribute) const;
-    CFX_WideString			GetAttrValue(FX_BSTR space, FX_BSTR name) const
+    FX_BOOL					GetAttrValue(const CFX_ByteStringC& space, const CFX_ByteStringC& name, CFX_WideString& attribute) const;
+    CFX_WideString			GetAttrValue(const CFX_ByteStringC& space, const CFX_ByteStringC& name) const
     {
         CFX_WideString attr;
         GetAttrValue(space, name, attr);
         return attr;
     }
 
-    FX_BOOL					GetAttrInteger(FX_BSTR name, int& attribute) const;
-    int						GetAttrInteger(FX_BSTR name) const
+    FX_BOOL					GetAttrInteger(const CFX_ByteStringC& name, int& attribute) const;
+    int						GetAttrInteger(const CFX_ByteStringC& name) const
     {
         int attr = 0;
         GetAttrInteger(name, attr);
         return attr;
     }
 
-    FX_BOOL					GetAttrInteger(FX_BSTR space, FX_BSTR name, int& attribute) const;
-    int						GetAttrInteger(FX_BSTR space, FX_BSTR name) const
+    FX_BOOL					GetAttrInteger(const CFX_ByteStringC& space, const CFX_ByteStringC& name, int& attribute) const;
+    int						GetAttrInteger(const CFX_ByteStringC& space, const CFX_ByteStringC& name) const
     {
         int attr = 0;
         GetAttrInteger(space, name, attr);
         return attr;
     }
 
-    FX_BOOL					GetAttrFloat(FX_BSTR name, FX_FLOAT& attribute) const;
-    FX_FLOAT				GetAttrFloat(FX_BSTR name) const
+    FX_BOOL					GetAttrFloat(const CFX_ByteStringC& name, FX_FLOAT& attribute) const;
+    FX_FLOAT				GetAttrFloat(const CFX_ByteStringC& name) const
     {
         FX_FLOAT attr = 0;
         GetAttrFloat(name, attr);
         return attr;
     }
 
-    FX_BOOL					GetAttrFloat(FX_BSTR space, FX_BSTR name, FX_FLOAT& attribute) const;
-    FX_FLOAT				GetAttrFloat(FX_BSTR space, FX_BSTR name) const
+    FX_BOOL					GetAttrFloat(const CFX_ByteStringC& space, const CFX_ByteStringC& name, FX_FLOAT& attribute) const;
+    FX_FLOAT				GetAttrFloat(const CFX_ByteStringC& space, const CFX_ByteStringC& name) const
     {
         FX_FLOAT attr = 0;
         GetAttrFloat(space, name, attr);
@@ -141,23 +141,23 @@
 
     CXML_Element*			GetElement(FX_DWORD index) const;
 
-    CXML_Element*			GetElement(FX_BSTR space, FX_BSTR tag) const
+    CXML_Element*			GetElement(const CFX_ByteStringC& space, const CFX_ByteStringC& tag) const
     {
         return GetElement(space, tag, 0);
     }
 
-    FX_DWORD				CountElements(FX_BSTR space, FX_BSTR tag) const;
+    FX_DWORD				CountElements(const CFX_ByteStringC& space, const CFX_ByteStringC& tag) const;
 
-    CXML_Element*			GetElement(FX_BSTR space, FX_BSTR tag, int index) const;
+    CXML_Element*			GetElement(const CFX_ByteStringC& space, const CFX_ByteStringC& tag, int index) const;
 
     FX_DWORD				FindElement(CXML_Element *pChild) const;
 
 
 
 
-    void					SetTag(FX_BSTR qSpace, FX_BSTR tagname);
+    void					SetTag(const CFX_ByteStringC& qSpace, const CFX_ByteStringC& tagname);
 
-    void					SetTag(FX_BSTR qTagName);
+    void					SetTag(const CFX_ByteStringC& qTagName);
 
     void					RemoveChildren();
 
diff --git a/core/include/fxge/fpf.h b/core/include/fxge/fpf.h
index 710600c..e288d18 100644
--- a/core/include/fxge/fpf.h
+++ b/core/include/fxge/fpf.h
@@ -55,10 +55,10 @@
     virtual ~IFPF_FontMgr() { }
     virtual void			LoadSystemFonts() = 0;
     virtual void			LoadPrivateFont(IFX_FileRead* pFontFile) = 0;
-    virtual void			LoadPrivateFont(FX_BSTR bsFileName) = 0;
+    virtual void			LoadPrivateFont(const CFX_ByteStringC& bsFileName) = 0;
     virtual void			LoadPrivateFont(void* pBuffer, size_t szBuffer) = 0;
 
-    virtual IFPF_Font*		CreateFont(FX_BSTR bsFamilyname, uint8_t charset, FX_DWORD dwStyle, FX_DWORD dwMatch = 0) = 0;
+    virtual IFPF_Font*		CreateFont(const CFX_ByteStringC& bsFamilyname, uint8_t charset, FX_DWORD dwStyle, FX_DWORD dwMatch = 0) = 0;
 };
 
 #endif  // CORE_INCLUDE_FXGE_FPF_H_
diff --git a/core/include/fxge/fx_font.h b/core/include/fxge/fx_font.h
index df752b4..29cc5df 100644
--- a/core/include/fxge/fx_font.h
+++ b/core/include/fxge/fx_font.h
@@ -320,7 +320,7 @@
 public:
     CFX_FolderFontInfo();
     virtual ~CFX_FolderFontInfo();
-    void				AddPath(FX_BSTR path);
+    void				AddPath(const CFX_ByteStringC& path);
     virtual void		Release();
     virtual	FX_BOOL		EnumFontList(CFX_FontMapper* pMapper);
     virtual void*		MapFont(int weight, FX_BOOL bItalic, int charset, int pitch_family, const FX_CHAR* face, FX_BOOL& bExact);
diff --git a/core/src/fpdfapi/fpdf_edit/fpdf_edit_content.cpp b/core/src/fpdfapi/fpdf_edit/fpdf_edit_content.cpp
index 7173860..8cfbd1b 100644
--- a/core/src/fpdfapi/fpdf_edit/fpdf_edit_content.cpp
+++ b/core/src/fpdfapi/fpdf_edit/fpdf_edit_content.cpp
@@ -106,11 +106,11 @@
     }
     CPDF_Stream* pStream = new CPDF_Stream(NULL, 0, NULL);
     CPDF_Dictionary* pFormDict = CPDF_Dictionary::Create();
-    pFormDict->SetAtName(FX_BSTR("Type"), FX_BSTR("XObject"));
-    pFormDict->SetAtName(FX_BSTR("Subtype"), FX_BSTR("Form"));
+    pFormDict->SetAtName("Type", "XObject");
+    pFormDict->SetAtName("Subtype", "Form");
     CFX_FloatRect bbox = m_pPage->GetPageBBox();
     matrix.TransformRect(bbox);
-    pFormDict->SetAtRect(FX_BSTR("BBox"), bbox);
+    pFormDict->SetAtRect("BBox", bbox);
     pStream->InitStream((uint8_t*)data, size, pFormDict);
     buf << "q " << matrix << " cm ";
     CFX_ByteString name = RealizeResource(pStream, "XObject");
diff --git a/core/src/fpdfapi/fpdf_edit/fpdf_edit_doc.cpp b/core/src/fpdfapi/fpdf_edit/fpdf_edit_doc.cpp
index 7176a62..18913a0 100644
--- a/core/src/fpdfapi/fpdf_edit/fpdf_edit_doc.cpp
+++ b/core/src/fpdfapi/fpdf_edit/fpdf_edit_doc.cpp
@@ -1170,8 +1170,8 @@
     }
     m_PageList.RemoveAt(iPage);
 }
-CPDF_Object* FPDFAPI_GetPageAttr(CPDF_Dictionary* pPageDict, FX_BSTR name);
-void FPDFAPI_FlatPageAttr(CPDF_Dictionary* pPageDict, FX_BSTR name)
+CPDF_Object* FPDFAPI_GetPageAttr(CPDF_Dictionary* pPageDict, const CFX_ByteStringC& name);
+void FPDFAPI_FlatPageAttr(CPDF_Dictionary* pPageDict, const CFX_ByteStringC& name)
 {
     if (pPageDict->KeyExist(name)) {
         return;
diff --git a/core/src/fpdfapi/fpdf_font/font_int.h b/core/src/fpdfapi/fpdf_font/font_int.h
index 6f32f4f..aa46f16 100644
--- a/core/src/fpdfapi/fpdf_font/font_int.h
+++ b/core/src/fpdfapi/fpdf_font/font_int.h
@@ -57,7 +57,7 @@
     CPDF_CMapParser();
     ~CPDF_CMapParser() {}
     FX_BOOL	Initialize(CPDF_CMap*);
-    void	ParseWord(FX_BSTR str);
+    void	ParseWord(const CFX_ByteStringC& str);
     CFX_BinaryBuf	m_AddMaps;
 private:
     CPDF_CMap*	m_pCMap;
diff --git a/core/src/fpdfapi/fpdf_font/fpdf_font.cpp b/core/src/fpdfapi/fpdf_font/fpdf_font.cpp
index c6922d1..48a96dc 100644
--- a/core/src/fpdfapi/fpdf_font/fpdf_font.cpp
+++ b/core/src/fpdfapi/fpdf_font/fpdf_font.cpp
@@ -391,7 +391,7 @@
     return m_Font.GetGlyphWidth(glyph_index);
 }
 int _PDF_GetStandardFontName(CFX_ByteString& name);
-CPDF_Font* CPDF_Font::GetStockFont(CPDF_Document* pDoc, FX_BSTR name)
+CPDF_Font* CPDF_Font::GetStockFont(CPDF_Document* pDoc, const CFX_ByteStringC& name)
 {
     CFX_ByteString fontname(name);
     int font_id = _PDF_GetStandardFontName(fontname);
@@ -532,7 +532,7 @@
     }
     return 0;
 }
-static FX_DWORD _StringToCode(FX_BSTR str)
+static FX_DWORD _StringToCode(const CFX_ByteStringC& str)
 {
     const FX_CHAR* buf = str.GetCStr();
     int len = str.GetLength();
@@ -584,7 +584,7 @@
     }
     return ret;
 }
-static CFX_WideString _StringToWideString(FX_BSTR str)
+static CFX_WideString _StringToWideString(const CFX_ByteStringC& str)
 {
     const FX_CHAR* buf = str.GetCStr();
     int len = str.GetLength();
diff --git a/core/src/fpdfapi/fpdf_font/fpdf_font_cid.cpp b/core/src/fpdfapi/fpdf_font/fpdf_font_cid.cpp
index bec2c90..ed5ef5c 100644
--- a/core/src/fpdfapi/fpdf_font/fpdf_font_cid.cpp
+++ b/core/src/fpdfapi/fpdf_font/fpdf_font_cid.cpp
@@ -119,7 +119,7 @@
     m_AddMaps.EstimateSize(0, 10240);
     return TRUE;
 }
-static FX_DWORD CMap_GetCode(FX_BSTR word)
+static FX_DWORD CMap_GetCode(const CFX_ByteStringC& word)
 {
     int num = 0;
     if (word.GetAt(0) == '<') {
@@ -146,7 +146,7 @@
     }
     return num;
 }
-static FX_BOOL _CMap_GetCodeRange(_CMap_CodeRange& range, FX_BSTR first, FX_BSTR second)
+static FX_BOOL _CMap_GetCodeRange(_CMap_CodeRange& range, const CFX_ByteStringC& first, const CFX_ByteStringC& second)
 {
     if (first.GetLength() == 0 || first.GetAt(0) != '<') {
         return FALSE;
@@ -177,11 +177,11 @@
     }
     return TRUE;
 }
-static CFX_ByteString CMap_GetString(FX_BSTR word)
+static CFX_ByteString CMap_GetString(const CFX_ByteStringC& word)
 {
     return word.Mid(1, word.GetLength() - 2);
 }
-void CPDF_CMapParser::ParseWord(FX_BSTR word)
+void CPDF_CMapParser::ParseWord(const CFX_ByteStringC& word)
 {
     if (word.IsEmpty()) {
         return;
diff --git a/core/src/fpdfapi/fpdf_page/fpdf_page.cpp b/core/src/fpdfapi/fpdf_page/fpdf_page.cpp
index 046cebe..688066e 100644
--- a/core/src/fpdfapi/fpdf_page/fpdf_page.cpp
+++ b/core/src/fpdfapi/fpdf_page/fpdf_page.cpp
@@ -902,7 +902,7 @@
         pModule->DestroyPageCache(m_pPageRender);
     }
 }
-CPDF_Object* FPDFAPI_GetPageAttr(CPDF_Dictionary* pPageDict, FX_BSTR name)
+CPDF_Object* FPDFAPI_GetPageAttr(CPDF_Dictionary* pPageDict, const CFX_ByteStringC& name)
 {
     int level = 0;
     while (1) {
@@ -921,7 +921,7 @@
         }
     }
 }
-CPDF_Object* CPDF_Page::GetPageAttr(FX_BSTR name) const
+CPDF_Object* CPDF_Page::GetPageAttr(const CFX_ByteStringC& name) const
 {
     return FPDFAPI_GetPageAttr(m_pFormDict, name);
 }
diff --git a/core/src/fpdfapi/fpdf_page/fpdf_page_doc.cpp b/core/src/fpdfapi/fpdf_page/fpdf_page_doc.cpp
index 6c3d8c6..1c0629f 100644
--- a/core/src/fpdfapi/fpdf_page/fpdf_page_doc.cpp
+++ b/core/src/fpdfapi/fpdf_page/fpdf_page_doc.cpp
@@ -360,7 +360,7 @@
     return pFont;
 }
 
-CPDF_Font* CPDF_DocPageData::GetStandardFont(FX_BSTR fontName, CPDF_FontEncoding* pEncoding)
+CPDF_Font* CPDF_DocPageData::GetStandardFont(const CFX_ByteStringC& fontName, CPDF_FontEncoding* pEncoding)
 {
     if (fontName.IsEmpty())
         return nullptr;
diff --git a/core/src/fpdfapi/fpdf_page/fpdf_page_graph_state.cpp b/core/src/fpdfapi/fpdf_page/fpdf_page_graph_state.cpp
index 3ce4baf..8752acf 100644
--- a/core/src/fpdfapi/fpdf_page/fpdf_page_graph_state.cpp
+++ b/core/src/fpdfapi/fpdf_page/fpdf_page_graph_state.cpp
@@ -376,7 +376,7 @@
         pDocCache->ReleaseTransferFunc(m_pTR);
     }
 }
-static int GetBlendType(FX_BSTR mode)
+static int GetBlendType(const CFX_ByteStringC& mode)
 {
     switch (mode.GetID()) {
         case FXBSTR_ID('N', 'o', 'r', 'm'):
@@ -417,7 +417,7 @@
     }
     return FXDIB_BLEND_NORMAL;
 }
-void CPDF_GeneralStateData::SetBlendMode(FX_BSTR blend_mode)
+void CPDF_GeneralStateData::SetBlendMode(const CFX_ByteStringC& blend_mode)
 {
     if (blend_mode.GetLength() > 15) {
         return;
@@ -677,7 +677,7 @@
     }
     m_Marks.RemoveAt(size - 1);
 }
-FX_BOOL CPDF_ContentMark::HasMark(FX_BSTR mark) const
+FX_BOOL CPDF_ContentMark::HasMark(const CFX_ByteStringC& mark) const
 {
     if (m_pObject == NULL) {
         return FALSE;
@@ -690,7 +690,7 @@
     }
     return FALSE;
 }
-FX_BOOL CPDF_ContentMark::LookupMark(FX_BSTR mark, CPDF_Dictionary*& pDict) const
+FX_BOOL CPDF_ContentMark::LookupMark(const CFX_ByteStringC& mark, CPDF_Dictionary*& pDict) const
 {
     if (m_pObject == NULL) {
         return FALSE;
diff --git a/core/src/fpdfapi/fpdf_page/fpdf_page_parser.cpp b/core/src/fpdfapi/fpdf_page/fpdf_page_parser.cpp
index d898fee..ebe7548 100644
--- a/core/src/fpdfapi/fpdf_page/fpdf_page_parser.cpp
+++ b/core/src/fpdfapi/fpdf_page/fpdf_page_parser.cpp
@@ -438,7 +438,7 @@
     _FX_BSTRC("CCITTFaxDecode"), _FX_BSTRC("CCF"),
     _FX_BSTRC("DCTDecode"), _FX_BSTRC("DCT"),
 };
-static CFX_ByteStringC _PDF_FindFullName(const _FX_BSTR* table, int count, FX_BSTR abbr)
+static CFX_ByteStringC _PDF_FindFullName(const _FX_BSTR* table, int count, const CFX_ByteStringC& abbr)
 {
     int i = 0;
     while (i < count) {
@@ -496,7 +496,7 @@
             }
     }
 }
-static CFX_ByteStringC _PDF_FindAbbrName(const _FX_BSTR* table, int count, FX_BSTR fullName)
+static CFX_ByteStringC _PDF_FindAbbrName(const _FX_BSTR* table, int count, const CFX_ByteStringC& fullName)
 {
     int i = 0;
     while (i < count) {
@@ -1178,7 +1178,7 @@
         m_pCurStates->m_TextState.SetFont(pFont);
     }
 }
-CPDF_Object* CPDF_StreamContentParser::FindResourceObj(FX_BSTR type, const CFX_ByteString& name)
+CPDF_Object* CPDF_StreamContentParser::FindResourceObj(const CFX_ByteStringC& type, const CFX_ByteString& name)
 {
     if (m_pResources == NULL) {
         return NULL;
diff --git a/core/src/fpdfapi/fpdf_page/pageint.h b/core/src/fpdfapi/fpdf_page/pageint.h
index 3e6abc2..1121413 100644
--- a/core/src/fpdfapi/fpdf_page/pageint.h
+++ b/core/src/fpdfapi/fpdf_page/pageint.h
@@ -206,7 +206,7 @@
     CPDF_Font*			FindFont(const CFX_ByteString& name);
     CPDF_ColorSpace*	FindColorSpace(const CFX_ByteString& name);
     CPDF_Pattern*		FindPattern(const CFX_ByteString& name, FX_BOOL bShading);
-    CPDF_Object*		FindResourceObj(FX_BSTR type, const CFX_ByteString& name);
+    CPDF_Object*		FindResourceObj(const CFX_ByteStringC& type, const CFX_ByteString& name);
     void Handle_CloseFillStrokePath();
     void Handle_FillStrokePath();
     void Handle_CloseEOFillStrokePath();
@@ -335,7 +335,7 @@
 
     void                        Clear(FX_BOOL bRelease = FALSE);
     CPDF_Font*                  GetFont(CPDF_Dictionary* pFontDict, FX_BOOL findOnly);
-    CPDF_Font*                  GetStandardFont(FX_BSTR fontName, CPDF_FontEncoding* pEncoding);
+    CPDF_Font*                  GetStandardFont(const CFX_ByteStringC& fontName, CPDF_FontEncoding* pEncoding);
     void                        ReleaseFont(CPDF_Dictionary* pFontDict);
     CPDF_ColorSpace*            GetColorSpace(CPDF_Object* pCSObj, CPDF_Dictionary* pResources);
     CPDF_ColorSpace*            GetCopiedColorSpace(CPDF_Object* pCSObj);
diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_encrypt.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_encrypt.cpp
index 973a14e..b4366ba 100644
--- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_encrypt.cpp
+++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_encrypt.cpp
@@ -103,7 +103,7 @@
 {
     return m_Permissions;
 }
-static FX_BOOL _LoadCryptInfo(CPDF_Dictionary* pEncryptDict, FX_BSTR name, int& cipher, int& keylen)
+static FX_BOOL _LoadCryptInfo(CPDF_Dictionary* pEncryptDict, const CFX_ByteStringC& name, int& cipher, int& keylen)
 {
     int Version = pEncryptDict->GetInteger(FX_BSTRC("V"));
     cipher = FXCIPHER_RC4;
diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_filters.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_filters.cpp
index 97e68b5..f0cabe5 100644
--- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_filters.cpp
+++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_filters.cpp
@@ -66,7 +66,7 @@
     m_bEOF = TRUE;
     m_SrcPos -= left_input;
 }
-CFX_DataFilter* FPDF_CreateFilter(FX_BSTR name, const CPDF_Dictionary* pParam, int width, int height)
+CFX_DataFilter* FPDF_CreateFilter(const CFX_ByteStringC& name, const CPDF_Dictionary* pParam, int width, int height)
 {
     FX_DWORD id = name.GetID();
     switch (id) {
diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_objects.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_objects.cpp
index 192be3a..bfac0e3 100644
--- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_objects.cpp
+++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_objects.cpp
@@ -353,11 +353,11 @@
     : CPDF_Object(PDFOBJ_NUMBER), m_bInteger(bInteger), m_Integer(*(int*)pData) {
 }
 
-CPDF_Number::CPDF_Number(FX_BSTR str) : CPDF_Object(PDFOBJ_NUMBER) {
+CPDF_Number::CPDF_Number(const CFX_ByteStringC& str) : CPDF_Object(PDFOBJ_NUMBER) {
     FX_atonum(str, m_bInteger, &m_Integer);
 }
 
-void CPDF_Number::SetString(FX_BSTR str)
+void CPDF_Number::SetString(const CFX_ByteStringC& str)
 {
     FX_atonum(str, m_bInteger, &m_Integer);
 }
@@ -588,19 +588,19 @@
     m_Map.GetNextAssoc(pos, key, (void*&)p);
     return p;
 }
-CPDF_Object* CPDF_Dictionary::GetElement(FX_BSTR key) const
+CPDF_Object* CPDF_Dictionary::GetElement(const CFX_ByteStringC& key) const
 {
     CPDF_Object* p = NULL;
     m_Map.Lookup(key, (void*&)p);
     return p;
 }
-CPDF_Object* CPDF_Dictionary::GetElementValue(FX_BSTR key) const
+CPDF_Object* CPDF_Dictionary::GetElementValue(const CFX_ByteStringC& key) const
 {
     CPDF_Object* p = NULL;
     m_Map.Lookup(key, (void*&)p);
     return p ? p->GetDirect() : NULL;
 }
-CFX_ByteString CPDF_Dictionary::GetString(FX_BSTR key) const
+CFX_ByteString CPDF_Dictionary::GetString(const CFX_ByteStringC& key) const
 {
     CPDF_Object* p = NULL;
     m_Map.Lookup(key, (void*&)p);
@@ -609,7 +609,7 @@
     else
         return CFX_ByteString();
 }
-CFX_ByteStringC CPDF_Dictionary::GetConstString(FX_BSTR key) const
+CFX_ByteStringC CPDF_Dictionary::GetConstString(const CFX_ByteStringC& key) const
 {
     CPDF_Object* p = NULL;
     m_Map.Lookup(key, (void*&)p);
@@ -618,7 +618,7 @@
     else
         return CFX_ByteStringC();
 }
-CFX_WideString CPDF_Dictionary::GetUnicodeText(FX_BSTR key, CFX_CharMap* pCharMap) const
+CFX_WideString CPDF_Dictionary::GetUnicodeText(const CFX_ByteStringC& key, CFX_CharMap* pCharMap) const
 {
     CPDF_Object* p = NULL;
     m_Map.Lookup(key, (void*&)p);
@@ -634,7 +634,7 @@
     }
     return CFX_WideString();
 }
-CFX_ByteString CPDF_Dictionary::GetString(FX_BSTR key, FX_BSTR def) const
+CFX_ByteString CPDF_Dictionary::GetString(const CFX_ByteStringC& key, const CFX_ByteStringC& def) const
 {
     CPDF_Object* p = NULL;
     m_Map.Lookup(key, (void*&)p);
@@ -643,7 +643,7 @@
     }
     return CFX_ByteString(def);
 }
-CFX_ByteStringC CPDF_Dictionary::GetConstString(FX_BSTR key, FX_BSTR def) const
+CFX_ByteStringC CPDF_Dictionary::GetConstString(const CFX_ByteStringC& key, const CFX_ByteStringC& def) const
 {
     CPDF_Object* p = NULL;
     m_Map.Lookup(key, (void*&)p);
@@ -652,7 +652,7 @@
     else
         return CFX_ByteStringC(def);
 }
-int CPDF_Dictionary::GetInteger(FX_BSTR key) const
+int CPDF_Dictionary::GetInteger(const CFX_ByteStringC& key) const
 {
     CPDF_Object* p = NULL;
     m_Map.Lookup(key, (void*&)p);
@@ -661,7 +661,7 @@
     }
     return 0;
 }
-int CPDF_Dictionary::GetInteger(FX_BSTR key, int def) const
+int CPDF_Dictionary::GetInteger(const CFX_ByteStringC& key, int def) const
 {
     CPDF_Object* p = NULL;
     m_Map.Lookup(key, (void*&)p);
@@ -670,7 +670,7 @@
     }
     return def;
 }
-FX_FLOAT CPDF_Dictionary::GetNumber(FX_BSTR key) const
+FX_FLOAT CPDF_Dictionary::GetNumber(const CFX_ByteStringC& key) const
 {
     CPDF_Object* p = NULL;
     m_Map.Lookup(key, (void*&)p);
@@ -679,7 +679,7 @@
     }
     return 0;
 }
-FX_BOOL CPDF_Dictionary::GetBoolean(FX_BSTR key, FX_BOOL bDefault) const
+FX_BOOL CPDF_Dictionary::GetBoolean(const CFX_ByteStringC& key, FX_BOOL bDefault) const
 {
     CPDF_Object* p = NULL;
     m_Map.Lookup(key, (void*&)p);
@@ -688,7 +688,7 @@
     }
     return bDefault;
 }
-CPDF_Dictionary* CPDF_Dictionary::GetDict(FX_BSTR key) const
+CPDF_Dictionary* CPDF_Dictionary::GetDict(const CFX_ByteStringC& key) const
 {
     CPDF_Object* p = GetElementValue(key);
     if (p == NULL) {
@@ -700,7 +700,7 @@
     }
     return NULL;
 }
-CPDF_Array* CPDF_Dictionary::GetArray(FX_BSTR key) const
+CPDF_Array* CPDF_Dictionary::GetArray(const CFX_ByteStringC& key) const
 {
     CPDF_Object* p = GetElementValue(key);
     if (p == NULL || p->GetType() != PDFOBJ_ARRAY) {
@@ -708,7 +708,7 @@
     }
     return (CPDF_Array*)p;
 }
-CPDF_Stream* CPDF_Dictionary::GetStream(FX_BSTR key) const
+CPDF_Stream* CPDF_Dictionary::GetStream(const CFX_ByteStringC& key) const
 {
     CPDF_Object* p = GetElementValue(key);
     if (p == NULL || p->GetType() != PDFOBJ_STREAM) {
@@ -716,7 +716,7 @@
     }
     return (CPDF_Stream*)p;
 }
-CFX_FloatRect CPDF_Dictionary::GetRect(FX_BSTR key) const
+CFX_FloatRect CPDF_Dictionary::GetRect(const CFX_ByteStringC& key) const
 {
     CFX_FloatRect rect;
     CPDF_Array* pArray = GetArray(key);
@@ -725,7 +725,7 @@
     }
     return rect;
 }
-CFX_AffineMatrix CPDF_Dictionary::GetMatrix(FX_BSTR key) const
+CFX_AffineMatrix CPDF_Dictionary::GetMatrix(const CFX_ByteStringC& key) const
 {
     CFX_AffineMatrix matrix;
     CPDF_Array* pArray = GetArray(key);
@@ -734,12 +734,12 @@
     }
     return matrix;
 }
-FX_BOOL CPDF_Dictionary::KeyExist(FX_BSTR key) const
+FX_BOOL CPDF_Dictionary::KeyExist(const CFX_ByteStringC& key) const
 {
     void* value;
     return m_Map.Lookup(key, value);
 }
-void CPDF_Dictionary::SetAt(FX_BSTR key, CPDF_Object* pObj, CPDF_IndirectObjects* pObjs)
+void CPDF_Dictionary::SetAt(const CFX_ByteStringC& key, CPDF_Object* pObj, CPDF_IndirectObjects* pObjs)
 {
     ASSERT(m_Type == PDFOBJ_DICTIONARY);
     CPDF_Object* p = NULL;
@@ -759,12 +759,12 @@
         m_Map.RemoveKey(key);
     }
 }
-void CPDF_Dictionary::AddValue(FX_BSTR key, CPDF_Object* pObj)
+void CPDF_Dictionary::AddValue(const CFX_ByteStringC& key, CPDF_Object* pObj)
 {
     ASSERT(m_Type == PDFOBJ_DICTIONARY);
     m_Map.AddValue(key, pObj);
 }
-void CPDF_Dictionary::RemoveAt(FX_BSTR key)
+void CPDF_Dictionary::RemoveAt(const CFX_ByteStringC& key)
 {
     ASSERT(m_Type == PDFOBJ_DICTIONARY);
     CPDF_Object* p = NULL;
@@ -775,7 +775,7 @@
     p->Release();
     m_Map.RemoveKey(key);
 }
-void CPDF_Dictionary::ReplaceKey(FX_BSTR oldkey, FX_BSTR newkey)
+void CPDF_Dictionary::ReplaceKey(const CFX_ByteStringC& oldkey, const CFX_ByteStringC& newkey)
 {
     ASSERT(m_Type == PDFOBJ_DICTIONARY);
     CPDF_Object* p = NULL;
@@ -807,37 +807,37 @@
     }
     return TRUE;
 }
-void CPDF_Dictionary::SetAtInteger(FX_BSTR key, int i)
+void CPDF_Dictionary::SetAtInteger(const CFX_ByteStringC& key, int i)
 {
     SetAt(key, new CPDF_Number(i));
 }
-void CPDF_Dictionary::SetAtName(FX_BSTR key, const CFX_ByteString& name)
+void CPDF_Dictionary::SetAtName(const CFX_ByteStringC& key, const CFX_ByteString& name)
 {
     SetAt(key, new CPDF_Name(name));
 }
-void CPDF_Dictionary::SetAtString(FX_BSTR key, const CFX_ByteString& str)
+void CPDF_Dictionary::SetAtString(const CFX_ByteStringC& key, const CFX_ByteString& str)
 {
     SetAt(key, new CPDF_String(str));
 }
-void CPDF_Dictionary::SetAtReference(FX_BSTR key, CPDF_IndirectObjects* pDoc, FX_DWORD objnum)
+void CPDF_Dictionary::SetAtReference(const CFX_ByteStringC& key, CPDF_IndirectObjects* pDoc, FX_DWORD objnum)
 {
     SetAt(key, new CPDF_Reference(pDoc, objnum));
 }
-void CPDF_Dictionary::AddReference(FX_BSTR key, CPDF_IndirectObjects* pDoc, FX_DWORD objnum)
+void CPDF_Dictionary::AddReference(const CFX_ByteStringC& key, CPDF_IndirectObjects* pDoc, FX_DWORD objnum)
 {
     AddValue(key, new CPDF_Reference(pDoc, objnum));
 }
-void CPDF_Dictionary::SetAtNumber(FX_BSTR key, FX_FLOAT f)
+void CPDF_Dictionary::SetAtNumber(const CFX_ByteStringC& key, FX_FLOAT f)
 {
     CPDF_Number* pNumber = new CPDF_Number;
     pNumber->SetNumber(f);
     SetAt(key, pNumber);
 }
-void CPDF_Dictionary::SetAtBoolean(FX_BSTR key, FX_BOOL bValue)
+void CPDF_Dictionary::SetAtBoolean(const CFX_ByteStringC& key, FX_BOOL bValue)
 {
     SetAt(key, new CPDF_Boolean(bValue));
 }
-void CPDF_Dictionary::SetAtRect(FX_BSTR key, const CFX_FloatRect& rect)
+void CPDF_Dictionary::SetAtRect(const CFX_ByteStringC& key, const CFX_FloatRect& rect)
 {
     CPDF_Array* pArray = new CPDF_Array;
     pArray->AddNumber(rect.left);
@@ -846,7 +846,7 @@
     pArray->AddNumber(rect.top);
     SetAt(key, pArray);
 }
-void CPDF_Dictionary::SetAtMatrix(FX_BSTR key, const CFX_AffineMatrix& matrix)
+void CPDF_Dictionary::SetAtMatrix(const CFX_ByteStringC& key, const CFX_AffineMatrix& matrix)
 {
     CPDF_Array* pArray = new CPDF_Array;
     pArray->AddNumber16(matrix.a);
diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp
index 3a03f33..4fd7974 100644
--- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp
+++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp
@@ -331,7 +331,7 @@
     }
     return 0;
 }
-static int32_t GetDirectInteger(CPDF_Dictionary* pDict, FX_BSTR key)
+static int32_t GetDirectInteger(CPDF_Dictionary* pDict, const CFX_ByteStringC& key)
 {
     CPDF_Object* pObj = pDict->GetElement(key);
     if (pObj == NULL) {
@@ -342,7 +342,7 @@
     }
     return 0;
 }
-static FX_BOOL CheckDirectType(CPDF_Dictionary* pDict, FX_BSTR key, int32_t iType)
+static FX_BOOL CheckDirectType(CPDF_Dictionary* pDict, const CFX_ByteStringC& key, int32_t iType)
 {
     CPDF_Object* pObj = pDict->GetElement(key);
     if (!pObj) {
@@ -2545,7 +2545,7 @@
     }
     return TRUE;
 }
-FX_BOOL CPDF_SyntaxParser::SearchWord(FX_BSTR tag, FX_BOOL bWholeWord, FX_BOOL bForward, FX_FILESIZE limit)
+FX_BOOL CPDF_SyntaxParser::SearchWord(const CFX_ByteStringC& tag, FX_BOOL bWholeWord, FX_BOOL bForward, FX_FILESIZE limit)
 {
     int32_t taglen = tag.GetLength();
     if (taglen == 0) {
@@ -2616,7 +2616,7 @@
     FX_DWORD	m_Len;
     FX_DWORD	m_Offset;
 };
-int32_t CPDF_SyntaxParser::SearchMultiWord(FX_BSTR tags, FX_BOOL bWholeWord, FX_FILESIZE limit)
+int32_t CPDF_SyntaxParser::SearchMultiWord(const CFX_ByteStringC& tags, FX_BOOL bWholeWord, FX_FILESIZE limit)
 {
     int32_t ntags = 1, i;
     for (i = 0; i < tags.GetLength(); i ++)
@@ -2678,7 +2678,7 @@
     FX_Free(pPatterns);
     return found;
 }
-FX_FILESIZE CPDF_SyntaxParser::FindTag(FX_BSTR tag, FX_FILESIZE limit)
+FX_FILESIZE CPDF_SyntaxParser::FindTag(const CFX_ByteStringC& tag, FX_FILESIZE limit)
 {
     int32_t taglen = tag.GetLength();
     int32_t match = 0;
diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_utility.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_utility.cpp
index e647455..61134f5 100644
--- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_utility.cpp
+++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_utility.cpp
@@ -49,7 +49,7 @@
     m_dwSize = dwSize;
     m_dwCurPos = 0;
 }
-CPDF_SimpleParser::CPDF_SimpleParser(FX_BSTR str)
+CPDF_SimpleParser::CPDF_SimpleParser(const CFX_ByteStringC& str)
 {
     m_pData = str.GetPtr();
     m_dwSize = str.GetLength();
@@ -194,7 +194,7 @@
     }
     return CFX_ByteStringC(pStart, dwSize);
 }
-FX_BOOL CPDF_SimpleParser::SearchToken(FX_BSTR token)
+FX_BOOL CPDF_SimpleParser::SearchToken(const CFX_ByteStringC& token)
 {
     int token_len = token.GetLength();
     while (m_dwCurPos < m_dwSize - token_len) {
@@ -209,7 +209,7 @@
     m_dwCurPos += token_len;
     return TRUE;
 }
-FX_BOOL CPDF_SimpleParser::SkipWord(FX_BSTR token)
+FX_BOOL CPDF_SimpleParser::SkipWord(const CFX_ByteStringC& token)
 {
     while (1) {
         CFX_ByteStringC word = GetWord();
@@ -222,7 +222,7 @@
     }
     return FALSE;
 }
-FX_BOOL CPDF_SimpleParser::FindTagPair(FX_BSTR start_token, FX_BSTR end_token,
+FX_BOOL CPDF_SimpleParser::FindTagPair(const CFX_ByteStringC& start_token, const CFX_ByteStringC& end_token,
                                        FX_DWORD& start_pos, FX_DWORD& end_pos)
 {
     if (!start_token.IsEmpty()) {
@@ -243,7 +243,7 @@
     }
     return FALSE;
 }
-FX_BOOL CPDF_SimpleParser::FindTagParam(FX_BSTR token, int nParams)
+FX_BOOL CPDF_SimpleParser::FindTagParam(const CFX_ByteStringC& token, int nParams)
 {
     nParams ++;
     FX_DWORD* pBuf = FX_Alloc(FX_DWORD, nParams);
@@ -287,7 +287,7 @@
     }
     return 0;
 }
-CFX_ByteString PDF_NameDecode(FX_BSTR bstr)
+CFX_ByteString PDF_NameDecode(const CFX_ByteStringC& bstr)
 {
     int size = bstr.GetLength();
     const FX_CHAR* pSrc = bstr.GetCStr();
diff --git a/core/src/fpdfapi/fpdf_render/fpdf_render_loadimage.cpp b/core/src/fpdfapi/fpdf_render/fpdf_render_loadimage.cpp
index 2cbe2e8..5851aab 100644
--- a/core/src/fpdfapi/fpdf_render/fpdf_render_loadimage.cpp
+++ b/core/src/fpdfapi/fpdf_render/fpdf_render_loadimage.cpp
@@ -603,8 +603,9 @@
     if (decoder == FX_BSTRC("CCITTFaxDecode")) {
         m_pDecoder = FPDFAPI_CreateFaxDecoder(src_data, src_size, m_Width, m_Height, pParams);
     } else if (decoder == FX_BSTRC("DCTDecode")) {
-        m_pDecoder = CPDF_ModuleMgr::Get()->GetJpegModule()->CreateDecoder(src_data, src_size, m_Width, m_Height,
-                     m_nComponents, pParams ? pParams->GetInteger(FX_BSTR("ColorTransform"), 1) : 1);
+        m_pDecoder = CPDF_ModuleMgr::Get()->GetJpegModule()->CreateDecoder(
+            src_data, src_size, m_Width, m_Height, m_nComponents,
+            pParams ? pParams->GetInteger("ColorTransform", 1) : 1);
         if (!m_pDecoder) {
             FX_BOOL bTransform = FALSE;
             int comps, bpc;
diff --git a/core/src/fpdfdoc/doc_basic.cpp b/core/src/fpdfdoc/doc_basic.cpp
index f9e692c..e559c0e 100644
--- a/core/src/fpdfdoc/doc_basic.cpp
+++ b/core/src/fpdfdoc/doc_basic.cpp
@@ -72,7 +72,7 @@
     }
     return m_pObj->GetString();
 }
-CPDF_NameTree::CPDF_NameTree(CPDF_Document* pDoc, FX_BSTR category)
+CPDF_NameTree::CPDF_NameTree(CPDF_Document* pDoc, const CFX_ByteStringC& category)
 {
     if (pDoc->GetRoot() && pDoc->GetRoot()->GetDict(FX_BSTRC("Names")))
         m_pRoot = pDoc->GetRoot()->GetDict(FX_BSTRC("Names"))->GetDict(category);
@@ -229,7 +229,7 @@
     int nIndex = 0;
     return SearchNameNode(m_pRoot, csName, nIndex, NULL);
 }
-CPDF_Array*	CPDF_NameTree::LookupNamedDest(CPDF_Document* pDoc, FX_BSTR sName)
+CPDF_Array*	CPDF_NameTree::LookupNamedDest(CPDF_Document* pDoc, const CFX_ByteStringC& sName)
 {
     CPDF_Object* pValue = LookupValue(sName);
     if (pValue == NULL) {
@@ -282,7 +282,7 @@
     return result;
 }
 #endif
-static CFX_WideString FILESPEC_DecodeFileName(FX_WSTR filepath)
+static CFX_WideString FILESPEC_DecodeFileName(const CFX_WideStringC& filepath)
 {
     if (filepath.GetLength() <= 1) {
         return CFX_WideString();
@@ -362,7 +362,7 @@
     }
     return ((CPDF_Dictionary*)m_pObj)->GetString(FX_BSTRC("FS")) == FX_BSTRC("URL");
 }
-CFX_WideString FILESPEC_EncodeFileName(FX_WSTR filepath)
+CFX_WideString FILESPEC_EncodeFileName(const CFX_WideStringC& filepath)
 {
     if (filepath.GetLength() <= 1) {
         return CFX_WideString();
@@ -417,7 +417,7 @@
     }
     return NULL;
 }
-static void FPDFDOC_FILESPEC_SetFileName(CPDF_Object *pObj, FX_WSTR wsFileName, FX_BOOL bURL)
+static void FPDFDOC_FILESPEC_SetFileName(CPDF_Object *pObj, const CFX_WideStringC& wsFileName, FX_BOOL bURL)
 {
     ASSERT(pObj != NULL);
     CFX_WideString wsStr;
@@ -435,7 +435,7 @@
         pDict->SetAtString(FX_BSTRC("UF"), PDF_EncodeText(wsStr));
     }
 }
-void CPDF_FileSpec::SetFileName(FX_WSTR wsFileName, FX_BOOL bURL)
+void CPDF_FileSpec::SetFileName(const CFX_WideStringC& wsFileName, FX_BOOL bURL)
 {
     ASSERT(m_pObj != NULL);
     if (m_pObj->GetType() == PDFOBJ_DICTIONARY && bURL) {
@@ -540,7 +540,7 @@
     wsLabel.Format(L"%d", nPage + 1);
     return wsLabel;
 }
-int32_t CPDF_PageLabel::GetPageByLabel(FX_BSTR bsLabel) const
+int32_t CPDF_PageLabel::GetPageByLabel(const CFX_ByteStringC& bsLabel) const
 {
     if (m_pDocument == NULL) {
         return -1;
@@ -565,7 +565,7 @@
     }
     return -1;
 }
-int32_t CPDF_PageLabel::GetPageByLabel(FX_WSTR wsLabel) const
+int32_t CPDF_PageLabel::GetPageByLabel(const CFX_WideStringC& wsLabel) const
 {
     CFX_ByteString bsLabel = PDF_EncodeText(wsLabel.GetPtr());
     return GetPageByLabel(bsLabel);
diff --git a/core/src/fpdfdoc/doc_form.cpp b/core/src/fpdfdoc/doc_form.cpp
index 753ade0..27432df 100644
--- a/core/src/fpdfdoc/doc_form.cpp
+++ b/core/src/fpdfdoc/doc_form.cpp
@@ -1294,8 +1294,8 @@
     pField = m_pFieldTree->GetField(csWName);
     if (pField == NULL) {
         CPDF_Dictionary *pParent = (CPDF_Dictionary*)pFieldDict;
-        if (!pFieldDict->KeyExist(FX_BSTR("T")) &&
-                pFieldDict->GetString(FX_BSTRC("Subtype")) == FX_BSTRC("Widget")) {
+        if (!pFieldDict->KeyExist(FX_BSTRC("T")) &&
+            pFieldDict->GetString(FX_BSTRC("Subtype")) == FX_BSTRC("Widget")) {
             pParent = pFieldDict->GetDict(FX_BSTRC("Parent"));
             if (!pParent) {
                 pParent = (CPDF_Dictionary*)pFieldDict;
@@ -1386,7 +1386,7 @@
     }
     return NULL;
 }
-CFDF_Document* CPDF_InterForm::ExportToFDF(FX_WSTR pdf_path, FX_BOOL bSimpleFileSpec) const
+CFDF_Document* CPDF_InterForm::ExportToFDF(const CFX_WideStringC& pdf_path, FX_BOOL bSimpleFileSpec) const
 {
     CFX_PtrArray fields;
     int nCount = m_pFieldTree->m_Root.CountFields();
@@ -1396,8 +1396,8 @@
     }
     return ExportToFDF(pdf_path, fields, TRUE, bSimpleFileSpec);
 }
-CFX_WideString FILESPEC_EncodeFileName(FX_WSTR filepath);
-CFDF_Document* CPDF_InterForm::ExportToFDF(FX_WSTR pdf_path, CFX_PtrArray& fields, FX_BOOL bIncludeOrExclude, FX_BOOL bSimpleFileSpec) const
+CFX_WideString FILESPEC_EncodeFileName(const CFX_WideStringC& filepath);
+CFDF_Document* CPDF_InterForm::ExportToFDF(const CFX_WideStringC& pdf_path, CFX_PtrArray& fields, FX_BOOL bIncludeOrExclude, FX_BOOL bSimpleFileSpec) const
 {
     CFDF_Document* pDoc = CFDF_Document::CreateNewDoc();
     if (pDoc == NULL) {
diff --git a/core/src/fpdfdoc/doc_formcontrol.cpp b/core/src/fpdfdoc/doc_formcontrol.cpp
index 1ab6323..da28a0b 100644
--- a/core/src/fpdfdoc/doc_formcontrol.cpp
+++ b/core/src/fpdfdoc/doc_formcontrol.cpp
@@ -339,7 +339,7 @@
         return pObj->GetInteger();
     }
 }
-FX_BOOL CPDF_ApSettings::HasMKEntry(FX_BSTR csEntry)
+FX_BOOL CPDF_ApSettings::HasMKEntry(const CFX_ByteStringC& csEntry)
 {
     if (m_pDict == NULL) {
         return FALSE;
@@ -353,7 +353,7 @@
     }
     return m_pDict->GetInteger(FX_BSTRC("R"));
 }
-FX_ARGB CPDF_ApSettings::GetColor(int& iColorType, FX_BSTR csEntry)
+FX_ARGB CPDF_ApSettings::GetColor(int& iColorType, const CFX_ByteStringC& csEntry)
 {
     iColorType = COLORTYPE_TRANSPARENT;
     if (m_pDict == NULL) {
@@ -388,7 +388,7 @@
     }
     return color;
 }
-FX_FLOAT CPDF_ApSettings::GetOriginalColor(int index, FX_BSTR csEntry)
+FX_FLOAT CPDF_ApSettings::GetOriginalColor(int index, const CFX_ByteStringC& csEntry)
 {
     if (m_pDict == NULL) {
         return 0;
@@ -399,7 +399,7 @@
     }
     return 0;
 }
-void CPDF_ApSettings::GetOriginalColor(int& iColorType, FX_FLOAT fc[4], FX_BSTR csEntry)
+void CPDF_ApSettings::GetOriginalColor(int& iColorType, FX_FLOAT fc[4], const CFX_ByteStringC& csEntry)
 {
     iColorType = COLORTYPE_TRANSPARENT;
     for (int i = 0; i < 4; i ++) {
@@ -429,7 +429,7 @@
         fc[3] = pEntry->GetNumber(3);
     }
 }
-CFX_WideString CPDF_ApSettings::GetCaption(FX_BSTR csEntry)
+CFX_WideString CPDF_ApSettings::GetCaption(const CFX_ByteStringC& csEntry)
 {
     CFX_WideString csCaption;
     if (m_pDict == NULL) {
@@ -437,7 +437,7 @@
     }
     return m_pDict->GetUnicodeText(csEntry);
 }
-CPDF_Stream* CPDF_ApSettings::GetIcon(FX_BSTR csEntry)
+CPDF_Stream* CPDF_ApSettings::GetIcon(const CFX_ByteStringC& csEntry)
 {
     if (m_pDict == NULL) {
         return NULL;
diff --git a/core/src/fpdfdoc/doc_metadata.cpp b/core/src/fpdfdoc/doc_metadata.cpp
index 0239e0a..f0c507f 100644
--- a/core/src/fpdfdoc/doc_metadata.cpp
+++ b/core/src/fpdfdoc/doc_metadata.cpp
@@ -73,7 +73,7 @@
         pElmntRdf = pXmlElmnt->GetElement(NULL, FX_BSTRC("RDF"));
     }
 }
-int32_t CPDF_Metadata::GetString(FX_BSTR bsItem, CFX_WideString &wsStr)
+int32_t CPDF_Metadata::GetString(const CFX_ByteStringC& bsItem, CFX_WideString &wsStr)
 {
     if (!((PDFDOC_LPMETADATA)m_pData)->m_pXmlElmnt) {
         return -1;
diff --git a/core/src/fpdfdoc/doc_ocg.cpp b/core/src/fpdfdoc/doc_ocg.cpp
index 318e931..1906603 100644
--- a/core/src/fpdfdoc/doc_ocg.cpp
+++ b/core/src/fpdfdoc/doc_ocg.cpp
@@ -25,7 +25,7 @@
     }
     return -1;
 }
-static FX_BOOL FPDFDOC_OCG_HasIntent(const CPDF_Dictionary *pDict, FX_BSTR csElement, FX_BSTR csDef = FX_BSTRC(""))
+static FX_BOOL FPDFDOC_OCG_HasIntent(const CPDF_Dictionary *pDict, const CFX_ByteStringC& csElement, const CFX_ByteStringC& csDef = FX_BSTRC(""))
 {
     FXSYS_assert(pDict != NULL);
     CPDF_Object *pIntent = pDict->GetElementValue(FX_BSTRC("Intent"));
@@ -46,7 +46,7 @@
     bsIntent = pIntent->GetString();
     return bsIntent == FX_BSTRC("All") || bsIntent == csElement;
 }
-static CPDF_Dictionary* FPDFDOC_OCG_GetConfig(CPDF_Document *pDoc, const CPDF_Dictionary *pOCGDict, FX_BSTR bsState)
+static CPDF_Dictionary* FPDFDOC_OCG_GetConfig(CPDF_Document *pDoc, const CPDF_Dictionary *pOCGDict, const CFX_ByteStringC& bsState)
 {
     FXSYS_assert(pDoc && pOCGDict);
     CPDF_Dictionary *pOCProperties = pDoc->GetRoot()->GetDict(FX_BSTRC("OCProperties"));
@@ -101,7 +101,7 @@
 {
     m_OCGStates.RemoveAll();
 }
-FX_BOOL CPDF_OCContext::LoadOCGStateFromConfig(FX_BSTR csConfig, const CPDF_Dictionary *pOCGDict, FX_BOOL &bValidConfig) const
+FX_BOOL CPDF_OCContext::LoadOCGStateFromConfig(const CFX_ByteStringC& csConfig, const CPDF_Dictionary *pOCGDict, FX_BOOL &bValidConfig) const
 {
     CPDF_Dictionary *pConfig = FPDFDOC_OCG_GetConfig(m_pDocument, pOCGDict, csConfig);
     if (!pConfig) {
diff --git a/core/src/fpdfdoc/doc_tagged.cpp b/core/src/fpdfdoc/doc_tagged.cpp
index a724565..510dd20 100644
--- a/core/src/fpdfdoc/doc_tagged.cpp
+++ b/core/src/fpdfdoc/doc_tagged.cpp
@@ -312,7 +312,7 @@
         }
     }
 }
-static CPDF_Dictionary* FindAttrDict(CPDF_Object* pAttrs, FX_BSTR owner, FX_FLOAT nLevel = 0.0F)
+static CPDF_Dictionary* FindAttrDict(CPDF_Object* pAttrs, const CFX_ByteStringC& owner, FX_FLOAT nLevel = 0.0F)
 {
     if (nLevel > nMaxRecursion) {
         return NULL;
@@ -340,7 +340,7 @@
     }
     return NULL;
 }
-CPDF_Object* CPDF_StructElementImpl::GetAttr(FX_BSTR owner, FX_BSTR name, FX_BOOL bInheritable, FX_FLOAT fLevel)
+CPDF_Object* CPDF_StructElementImpl::GetAttr(const CFX_ByteStringC& owner, const CFX_ByteStringC& name, FX_BOOL bInheritable, FX_FLOAT fLevel)
 {
     if (fLevel > nMaxRecursion) {
         return NULL;
@@ -391,7 +391,7 @@
     }
     return NULL;
 }
-CPDF_Object* CPDF_StructElementImpl::GetAttr(FX_BSTR owner, FX_BSTR name, FX_BOOL bInheritable, int subindex)
+CPDF_Object* CPDF_StructElementImpl::GetAttr(const CFX_ByteStringC& owner, const CFX_ByteStringC& name, FX_BOOL bInheritable, int subindex)
 {
     CPDF_Object* pAttr = GetAttr(owner, name, bInheritable);
     if (pAttr == NULL || subindex == -1 || pAttr->GetType() != PDFOBJ_ARRAY) {
@@ -403,7 +403,7 @@
     }
     return pArray->GetElementValue(subindex);
 }
-CFX_ByteString CPDF_StructElementImpl::GetName(FX_BSTR owner, FX_BSTR name, FX_BSTR default_value, FX_BOOL bInheritable, int subindex)
+CFX_ByteString CPDF_StructElementImpl::GetName(const CFX_ByteStringC& owner, const CFX_ByteStringC& name, const CFX_ByteStringC& default_value, FX_BOOL bInheritable, int subindex)
 {
     CPDF_Object* pAttr = GetAttr(owner, name, bInheritable, subindex);
     if (pAttr == NULL || pAttr->GetType() != PDFOBJ_NAME) {
@@ -411,7 +411,7 @@
     }
     return pAttr->GetString();
 }
-FX_ARGB	CPDF_StructElementImpl::GetColor(FX_BSTR owner, FX_BSTR name, FX_ARGB default_value, FX_BOOL bInheritable, int subindex)
+FX_ARGB	CPDF_StructElementImpl::GetColor(const CFX_ByteStringC& owner, const CFX_ByteStringC& name, FX_ARGB default_value, FX_BOOL bInheritable, int subindex)
 {
     CPDF_Object* pAttr = GetAttr(owner, name, bInheritable, subindex);
     if (pAttr == NULL || pAttr->GetType() != PDFOBJ_ARRAY) {
@@ -420,7 +420,7 @@
     CPDF_Array* pArray = (CPDF_Array*)pAttr;
     return 0xff000000 | ((int)(pArray->GetNumber(0) * 255) << 16) | ((int)(pArray->GetNumber(1) * 255) << 8) | (int)(pArray->GetNumber(2) * 255);
 }
-FX_FLOAT CPDF_StructElementImpl::GetNumber(FX_BSTR owner, FX_BSTR name, FX_FLOAT default_value, FX_BOOL bInheritable, int subindex)
+FX_FLOAT CPDF_StructElementImpl::GetNumber(const CFX_ByteStringC& owner, const CFX_ByteStringC& name, FX_FLOAT default_value, FX_BOOL bInheritable, int subindex)
 {
     CPDF_Object* pAttr = GetAttr(owner, name, bInheritable, subindex);
     if (pAttr == NULL || pAttr->GetType() != PDFOBJ_NUMBER) {
@@ -428,7 +428,7 @@
     }
     return pAttr->GetNumber();
 }
-int	CPDF_StructElementImpl::GetInteger(FX_BSTR owner, FX_BSTR name, int default_value, FX_BOOL bInheritable, int subindex)
+int	CPDF_StructElementImpl::GetInteger(const CFX_ByteStringC& owner, const CFX_ByteStringC& name, int default_value, FX_BOOL bInheritable, int subindex)
 {
     CPDF_Object* pAttr = GetAttr(owner, name, bInheritable, subindex);
     if (pAttr == NULL || pAttr->GetType() != PDFOBJ_NUMBER) {
diff --git a/core/src/fpdfdoc/tagged_int.h b/core/src/fpdfdoc/tagged_int.h
index 44ba527..4ac8d75 100644
--- a/core/src/fpdfdoc/tagged_int.h
+++ b/core/src/fpdfdoc/tagged_int.h
@@ -67,16 +67,16 @@
         return &m_ObjectArray;
     }
 
-    CPDF_Object*			GetAttr(FX_BSTR owner, FX_BSTR name, FX_BOOL bInheritable = FALSE, FX_FLOAT fLevel = 0.0F);
+    CPDF_Object*			GetAttr(const CFX_ByteStringC& owner, const CFX_ByteStringC& name, FX_BOOL bInheritable = FALSE, FX_FLOAT fLevel = 0.0F);
 
-    CFX_ByteString			GetName(FX_BSTR owner, FX_BSTR name, FX_BSTR default_value, FX_BOOL bInheritable = FALSE, int subindex = -1);
-    FX_ARGB					GetColor(FX_BSTR owner, FX_BSTR name, FX_ARGB default_value, FX_BOOL bInheritable = FALSE, int subindex = -1);
-    FX_FLOAT				GetNumber(FX_BSTR owner, FX_BSTR name, FX_FLOAT default_value, FX_BOOL bInheritable = FALSE, int subindex = -1);
-    int						GetInteger(FX_BSTR owner, FX_BSTR name, int default_value, FX_BOOL bInheritable = FALSE, int subindex = -1);
+    CFX_ByteString			GetName(const CFX_ByteStringC& owner, const CFX_ByteStringC& name, const CFX_ByteStringC& default_value, FX_BOOL bInheritable = FALSE, int subindex = -1);
+    FX_ARGB					GetColor(const CFX_ByteStringC& owner, const CFX_ByteStringC& name, FX_ARGB default_value, FX_BOOL bInheritable = FALSE, int subindex = -1);
+    FX_FLOAT				GetNumber(const CFX_ByteStringC& owner, const CFX_ByteStringC& name, FX_FLOAT default_value, FX_BOOL bInheritable = FALSE, int subindex = -1);
+    int						GetInteger(const CFX_ByteStringC& owner, const CFX_ByteStringC& name, int default_value, FX_BOOL bInheritable = FALSE, int subindex = -1);
     CFX_PtrArray			m_ObjectArray;
     void					LoadKids(CPDF_Dictionary* pDict);
     void					LoadKid(FX_DWORD PageObjNum, CPDF_Object* pObj, CPDF_StructKid* pKid);
-    CPDF_Object*			GetAttr(FX_BSTR owner, FX_BSTR name, FX_BOOL bInheritable, int subindex);
+    CPDF_Object*			GetAttr(const CFX_ByteStringC& owner, const CFX_ByteStringC& name, FX_BOOL bInheritable, int subindex);
     CPDF_StructElementImpl*	Retain();
     void					Release();
 protected:
diff --git a/core/src/fpdftext/unicodenormalization.cpp b/core/src/fpdftext/unicodenormalization.cpp
index 7b01830..fa3d812 100644
--- a/core/src/fpdftext/unicodenormalization.cpp
+++ b/core/src/fpdftext/unicodenormalization.cpp
@@ -49,7 +49,7 @@
     }
     return (FX_STRSIZE)wFind;
 }
-FX_STRSIZE FX_WideString_GetNormalization(FX_WSTR wsSrc, FX_WCHAR* pDst)
+FX_STRSIZE FX_WideString_GetNormalization(const CFX_WideStringC& wsSrc, FX_WCHAR* pDst)
 {
     FX_STRSIZE nCount = 0;
     for (FX_STRSIZE len = 0; len < wsSrc.GetLength(); len ++) {
@@ -62,7 +62,7 @@
     }
     return nCount;
 }
-FX_STRSIZE FX_WideString_GetNormalization(FX_WSTR wsSrc, CFX_WideString &wsDst)
+FX_STRSIZE FX_WideString_GetNormalization(const CFX_WideStringC& wsSrc, CFX_WideString &wsDst)
 {
     FX_STRSIZE nLen = FX_WideString_GetNormalization(wsSrc, (FX_WCHAR*)NULL);
     if (!nLen) {
diff --git a/core/src/fxcrt/extension.h b/core/src/fxcrt/extension.h
index 24f2cec..4c270db 100644
--- a/core/src/fxcrt/extension.h
+++ b/core/src/fxcrt/extension.h
@@ -13,8 +13,8 @@
 {
 public:
     virtual ~IFXCRT_FileAccess() {}
-    virtual FX_BOOL		Open(FX_BSTR fileName, FX_DWORD dwMode) = 0;
-    virtual FX_BOOL		Open(FX_WSTR fileName, FX_DWORD dwMode) = 0;
+    virtual FX_BOOL		Open(const CFX_ByteStringC& fileName, FX_DWORD dwMode) = 0;
+    virtual FX_BOOL		Open(const CFX_WideStringC& fileName, FX_DWORD dwMode) = 0;
     virtual void		Close() = 0;
     virtual void		Release() = 0;
     virtual FX_FILESIZE	GetSize() const = 0;
diff --git a/core/src/fxcrt/fx_basic_bstring.cpp b/core/src/fxcrt/fx_basic_bstring.cpp
index 2baeb83..c6fa998 100644
--- a/core/src/fxcrt/fx_basic_bstring.cpp
+++ b/core/src/fxcrt/fx_basic_bstring.cpp
@@ -127,7 +127,7 @@
         *this = stringSrc;
     }
 }
-CFX_ByteString::CFX_ByteString(FX_BSTR stringSrc)
+CFX_ByteString::CFX_ByteString(const CFX_ByteStringC& stringSrc)
 {
     if (stringSrc.IsEmpty()) {
         m_pData = NULL;
@@ -137,7 +137,7 @@
         *this = stringSrc;
     }
 }
-CFX_ByteString::CFX_ByteString(FX_BSTR str1, FX_BSTR str2)
+CFX_ByteString::CFX_ByteString(const CFX_ByteStringC& str1, const CFX_ByteStringC& str2)
 {
     m_pData = NULL;
     int nNewLen = str1.GetLength() + str2.GetLength();
@@ -159,7 +159,7 @@
     }
     return *this;
 }
-const CFX_ByteString& CFX_ByteString::operator=(FX_BSTR str)
+const CFX_ByteString& CFX_ByteString::operator=(const CFX_ByteStringC& str)
 {
     if (str.IsEmpty()) {
         Empty();
@@ -224,7 +224,7 @@
     ConcatInPlace(string.m_pData->m_nDataLength, string.m_pData->m_String);
     return *this;
 }
-const CFX_ByteString& CFX_ByteString::operator+=(FX_BSTR string)
+const CFX_ByteString& CFX_ByteString::operator+=(const CFX_ByteStringC& string)
 {
     if (string.IsEmpty()) {
         return *this;
@@ -271,7 +271,7 @@
         m_pData = NULL;
     }
 }
-bool CFX_ByteString::EqualNoCase(FX_BSTR str) const
+bool CFX_ByteString::EqualNoCase(const CFX_ByteStringC& str) const
 {
     if (m_pData == NULL) {
         return str.IsEmpty();
@@ -815,7 +815,7 @@
     }
     return NULL;
 }
-FX_STRSIZE CFX_ByteString::Find(FX_BSTR lpszSub, FX_STRSIZE nStart) const
+FX_STRSIZE CFX_ByteString::Find(const CFX_ByteStringC& lpszSub, FX_STRSIZE nStart) const
 {
     if (m_pData == NULL) {
         return -1;
@@ -874,7 +874,7 @@
     m_pData->m_nDataLength -= nCount;
     return nCount;
 }
-FX_STRSIZE CFX_ByteString::Replace(FX_BSTR lpszOld, FX_BSTR lpszNew)
+FX_STRSIZE CFX_ByteString::Replace(const CFX_ByteStringC& lpszOld, const CFX_ByteStringC& lpszNew)
 {
     if (m_pData == NULL) {
         return 0;
@@ -960,7 +960,7 @@
     }
     *this = (*pCharMap->m_GetByteString)(pCharMap, str);
 }
-int CFX_ByteString::Compare(FX_BSTR str) const
+int CFX_ByteString::Compare(const CFX_ByteStringC& str) const
 {
     if (m_pData == NULL) {
         return str.IsEmpty() ? 0 : -1;
@@ -982,7 +982,7 @@
     }
     return 0;
 }
-void CFX_ByteString::TrimRight(FX_BSTR lpszTargets)
+void CFX_ByteString::TrimRight(const CFX_ByteStringC& lpszTargets)
 {
     if (m_pData == NULL || lpszTargets.IsEmpty()) {
         return;
@@ -1015,7 +1015,7 @@
 {
     TrimRight(FX_BSTRC("\x09\x0a\x0b\x0c\x0d\x20"));
 }
-void CFX_ByteString::TrimLeft(FX_BSTR lpszTargets)
+void CFX_ByteString::TrimLeft(const CFX_ByteStringC& lpszTargets)
 {
     if (m_pData == NULL) {
         return;
diff --git a/core/src/fxcrt/fx_basic_buffer.cpp b/core/src/fxcrt/fx_basic_buffer.cpp
index f56c429..43da8e9 100644
--- a/core/src/fxcrt/fx_basic_buffer.cpp
+++ b/core/src/fxcrt/fx_basic_buffer.cpp
@@ -139,7 +139,7 @@
 {
     return CFX_ByteStringC(m_pBuffer, m_DataSize);
 }
-CFX_ByteTextBuf& CFX_ByteTextBuf::operator << (FX_BSTR lpsz)
+CFX_ByteTextBuf& CFX_ByteTextBuf::operator << (const CFX_ByteStringC& lpsz)
 {
     AppendBlock(lpsz.GetPtr(), lpsz.GetLength());
     return *this;
@@ -183,7 +183,7 @@
     *(FX_WCHAR*)(m_pBuffer + m_DataSize) = ch;
     m_DataSize += sizeof(FX_WCHAR);
 }
-CFX_WideTextBuf& CFX_WideTextBuf::operator << (FX_WSTR str)
+CFX_WideTextBuf& CFX_WideTextBuf::operator << (const CFX_WideStringC& str)
 {
     AppendBlock(str.GetPtr(), str.GetLength() * sizeof(FX_WCHAR));
     return *this;
@@ -234,7 +234,7 @@
     AppendBlock(buf.m_pBuffer, buf.m_DataSize);
     return *this;
 }
-void CFX_WideTextBuf::operator =(FX_WSTR str)
+void CFX_WideTextBuf::operator =(const CFX_WideStringC& str)
 {
     CopyData(str.GetPtr(), str.GetLength() * sizeof(FX_WCHAR));
 }
@@ -278,7 +278,7 @@
     }
     return *this;
 }
-CFX_ArchiveSaver& CFX_ArchiveSaver::operator << (FX_BSTR bstr)
+CFX_ArchiveSaver& CFX_ArchiveSaver::operator << (const CFX_ByteStringC& bstr)
 {
     int len = bstr.GetLength();
     if (m_pStream) {
@@ -481,7 +481,7 @@
     FXSYS_itoa(i, buf, 10);
     return AppendBlock(buf, (size_t)FXSYS_strlen(buf));
 }
-int32_t IFX_BufferArchive::AppendString(FX_BSTR lpsz)
+int32_t IFX_BufferArchive::AppendString(const CFX_ByteStringC& lpsz)
 {
     return AppendBlock(lpsz.GetPtr(), lpsz.GetLength());
 }
diff --git a/core/src/fxcrt/fx_basic_maps.cpp b/core/src/fxcrt/fx_basic_maps.cpp
index 7df4cdb..afc7c82 100644
--- a/core/src/fxcrt/fx_basic_maps.cpp
+++ b/core/src/fxcrt/fx_basic_maps.cpp
@@ -261,7 +261,7 @@
     rNextPosition = (FX_POSITION) pAssocNext;
     return pAssocRet->value;
 }
-void*& CFX_MapByteStringToPtr::operator[](FX_BSTR key)
+void*& CFX_MapByteStringToPtr::operator[](const CFX_ByteStringC& key)
 {
     FX_DWORD nHash;
     CAssoc* pAssoc;
@@ -310,7 +310,7 @@
     }
 }
 CFX_MapByteStringToPtr::CAssoc*
-CFX_MapByteStringToPtr::GetAssocAt(FX_BSTR key, FX_DWORD& nHash) const
+CFX_MapByteStringToPtr::GetAssocAt(const CFX_ByteStringC& key, FX_DWORD& nHash) const
 {
     nHash = HashKey(key) % m_nHashTableSize;
     if (m_pHashTable == NULL) {
@@ -324,7 +324,7 @@
     }
     return NULL;
 }
-FX_BOOL CFX_MapByteStringToPtr::Lookup(FX_BSTR key, void*& rValue) const
+FX_BOOL CFX_MapByteStringToPtr::Lookup(const CFX_ByteStringC& key, void*& rValue) const
 {
     FX_DWORD nHash;
     CAssoc* pAssoc = GetAssocAt(key, nHash);
@@ -348,7 +348,7 @@
     }
     m_nHashTableSize = nHashSize;
 }
-inline FX_DWORD CFX_MapByteStringToPtr::HashKey(FX_BSTR key) const
+inline FX_DWORD CFX_MapByteStringToPtr::HashKey(const CFX_ByteStringC& key) const
 {
     FX_DWORD nHash = 0;
     int len = key.GetLength();
@@ -358,7 +358,7 @@
     }
     return nHash;
 }
-FX_BOOL CFX_MapByteStringToPtr::RemoveKey(FX_BSTR key)
+FX_BOOL CFX_MapByteStringToPtr::RemoveKey(const CFX_ByteStringC& key)
 {
     if (m_pHashTable == NULL) {
         return FALSE;
@@ -500,7 +500,7 @@
 {
     return !_CompactStringSame((_CompactString*)pData, ((CFX_ByteStringC*)param)->GetPtr(), ((CFX_ByteStringC*)param)->GetLength());
 }
-FX_BOOL CFX_CMapByteStringToPtr::Lookup(FX_BSTR key, void*& rValue) const
+FX_BOOL CFX_CMapByteStringToPtr::Lookup(const CFX_ByteStringC& key, void*& rValue) const
 {
     void* p = m_Buffer.Iterate(_CMapLookupCallback, (void*)&key);
     if (!p) {
@@ -509,7 +509,7 @@
     rValue = *(void**)((_CompactString*)p + 1);
     return TRUE;
 }
-void CFX_CMapByteStringToPtr::SetAt(FX_BSTR key, void* value)
+void CFX_CMapByteStringToPtr::SetAt(const CFX_ByteStringC& key, void* value)
 {
     ASSERT(value != NULL);
     int index, key_len = key.GetLength();
@@ -535,14 +535,14 @@
     _CompactStringStore(pKey, key.GetPtr(), key_len);
     *(void**)(pKey + 1) = value;
 }
-void CFX_CMapByteStringToPtr::AddValue(FX_BSTR key, void* value)
+void CFX_CMapByteStringToPtr::AddValue(const CFX_ByteStringC& key, void* value)
 {
     ASSERT(value != NULL);
     _CompactString* pKey = (_CompactString*)m_Buffer.Add();
     _CompactStringStore(pKey, key.GetPtr(), key.GetLength());
     *(void**)(pKey + 1) = value;
 }
-void CFX_CMapByteStringToPtr::RemoveKey(FX_BSTR key)
+void CFX_CMapByteStringToPtr::RemoveKey(const CFX_ByteStringC& key)
 {
     int key_len = key.GetLength();
     int size = m_Buffer.GetSize();
diff --git a/core/src/fxcrt/fx_basic_util.cpp b/core/src/fxcrt/fx_basic_util.cpp
index db1a5b4..6a15dfb 100644
--- a/core/src/fxcrt/fx_basic_util.cpp
+++ b/core/src/fxcrt/fx_basic_util.cpp
@@ -90,7 +90,7 @@
     }
     m_DataList.RemoveAll();
 }
-void FX_atonum(FX_BSTR strc, FX_BOOL& bInteger, void* pData)
+void FX_atonum(const CFX_ByteStringC& strc, FX_BOOL& bInteger, void* pData)
 {
     if (FXSYS_memchr(strc.GetPtr(), '.', strc.GetLength()) == NULL) {
         bInteger = TRUE;
@@ -123,7 +123,7 @@
         *(FX_FLOAT*)pData = FX_atof(strc);
     }
 }
-FX_FLOAT FX_atof(FX_BSTR strc)
+FX_FLOAT FX_atof(const CFX_ByteStringC& strc)
 {
     if (strc.GetLength() == 0) {
         return 0.0;
diff --git a/core/src/fxcrt/fx_extension.cpp b/core/src/fxcrt/fx_extension.cpp
index 0ce98f8..301ba53 100644
--- a/core/src/fxcrt/fx_extension.cpp
+++ b/core/src/fxcrt/fx_extension.cpp
@@ -11,7 +11,7 @@
 #else
 #include <ctime>
 #endif
-FX_HFILE FX_File_Open(FX_BSTR fileName, FX_DWORD dwMode)
+FX_HFILE FX_File_Open(const CFX_ByteStringC& fileName, FX_DWORD dwMode)
 {
     IFXCRT_FileAccess* pFA = FXCRT_FileAccess_Create();
     if (pFA && !pFA->Open(fileName, dwMode)) {
@@ -20,7 +20,7 @@
     }
     return (FX_HFILE)pFA;
 }
-FX_HFILE FX_File_Open(FX_WSTR fileName, FX_DWORD dwMode)
+FX_HFILE FX_File_Open(const CFX_WideStringC& fileName, FX_DWORD dwMode)
 {
     IFXCRT_FileAccess* pFA = FXCRT_FileAccess_Create();
     if (pFA && !pFA->Open(fileName, dwMode)) {
diff --git a/core/src/fxcrt/fx_xml_composer.cpp b/core/src/fxcrt/fx_xml_composer.cpp
index 7858290..97971aa 100644
--- a/core/src/fxcrt/fx_xml_composer.cpp
+++ b/core/src/fxcrt/fx_xml_composer.cpp
@@ -6,7 +6,7 @@
 
 #include "../../include/fxcrt/fx_xml.h"
 #include "xml_int.h"
-void FX_XML_SplitQualifiedName(FX_BSTR bsFullName, CFX_ByteStringC &bsSpace, CFX_ByteStringC &bsName)
+void FX_XML_SplitQualifiedName(const CFX_ByteStringC& bsFullName, CFX_ByteStringC &bsSpace, CFX_ByteStringC &bsName)
 {
     if (bsFullName.IsEmpty()) {
         return;
@@ -25,12 +25,12 @@
         bsName = CFX_ByteStringC(bsFullName.GetCStr() + iStart, bsFullName.GetLength() - iStart);
     }
 }
-void CXML_Element::SetTag(FX_BSTR qSpace, FX_BSTR tagname)
+void CXML_Element::SetTag(const CFX_ByteStringC& qSpace, const CFX_ByteStringC& tagname)
 {
     m_QSpaceName = qSpace;
     m_TagName = tagname;
 }
-void CXML_Element::SetTag(FX_BSTR qTagName)
+void CXML_Element::SetTag(const CFX_ByteStringC& qTagName)
 {
     ASSERT(!qTagName.IsEmpty());
     CFX_ByteStringC bsSpace, bsName;
diff --git a/core/src/fxcrt/fx_xml_parser.cpp b/core/src/fxcrt/fx_xml_parser.cpp
index c2f1f64..dcf91d1 100644
--- a/core/src/fxcrt/fx_xml_parser.cpp
+++ b/core/src/fxcrt/fx_xml_parser.cpp
@@ -150,7 +150,7 @@
     } while (ReadNextBlock());
     name = buf.GetByteString();
 }
-void CXML_Parser::SkipLiterals(FX_BSTR str)
+void CXML_Parser::SkipLiterals(const CFX_ByteStringC& str)
 {
     m_nOffset = m_nBufferOffset + (FX_FILESIZE)m_dwIndex;
     if (IsEOF()) {
@@ -512,7 +512,7 @@
     bCDATA = FALSE;
     return pElement;
 }
-void CXML_Parser::InsertContentSegment(FX_BOOL bCDATA, FX_WSTR content, CXML_Element* pElement)
+void CXML_Parser::InsertContentSegment(FX_BOOL bCDATA, const CFX_WideStringC& content, CXML_Element* pElement)
 {
     if (content.IsEmpty()) {
         return;
@@ -561,7 +561,7 @@
     , m_AttrMap()
 {
 }
-CXML_Element::CXML_Element(FX_BSTR qSpace, FX_BSTR tagName)
+CXML_Element::CXML_Element(const CFX_ByteStringC& qSpace, const CFX_ByteStringC& tagName)
     : m_QSpaceName()
     , m_TagName()
     , m_AttrMap()
@@ -569,7 +569,7 @@
     m_QSpaceName = qSpace;
     m_TagName = tagName;
 }
-CXML_Element::CXML_Element(FX_BSTR qTagName)
+CXML_Element::CXML_Element(const CFX_ByteStringC& qTagName)
     : m_pParent(NULL)
     , m_QSpaceName()
     , m_TagName()
@@ -617,7 +617,7 @@
     }
     return GetNamespaceURI(m_QSpaceName);
 }
-CFX_ByteString CXML_Element::GetNamespaceURI(FX_BSTR qName) const
+CFX_ByteString CXML_Element::GetNamespaceURI(const CFX_ByteStringC& qName) const
 {
     const CFX_WideString* pwsSpace;
     const CXML_Element *pElement = this;
@@ -644,19 +644,19 @@
     name = item.m_AttrName;
     value = item.m_Value;
 }
-FX_BOOL CXML_Element::HasAttr(FX_BSTR name) const
+FX_BOOL CXML_Element::HasAttr(const CFX_ByteStringC& name) const
 {
     CFX_ByteStringC bsSpace, bsName;
     FX_XML_SplitQualifiedName(name, bsSpace, bsName);
     return m_AttrMap.Lookup(bsSpace, bsName) != NULL;
 }
-FX_BOOL CXML_Element::GetAttrValue(FX_BSTR name, CFX_WideString& attribute) const
+FX_BOOL CXML_Element::GetAttrValue(const CFX_ByteStringC& name, CFX_WideString& attribute) const
 {
     CFX_ByteStringC bsSpace, bsName;
     FX_XML_SplitQualifiedName(name, bsSpace, bsName);
     return GetAttrValue(bsSpace, bsName, attribute);
 }
-FX_BOOL CXML_Element::GetAttrValue(FX_BSTR space, FX_BSTR name, CFX_WideString& attribute) const
+FX_BOOL CXML_Element::GetAttrValue(const CFX_ByteStringC& space, const CFX_ByteStringC& name, CFX_WideString& attribute) const
 {
     const CFX_WideString* pValue = m_AttrMap.Lookup(space, name);
     if (pValue) {
@@ -665,7 +665,7 @@
     }
     return FALSE;
 }
-FX_BOOL CXML_Element::GetAttrInteger(FX_BSTR name, int& attribute) const
+FX_BOOL CXML_Element::GetAttrInteger(const CFX_ByteStringC& name, int& attribute) const
 {
     CFX_ByteStringC bsSpace, bsName;
     FX_XML_SplitQualifiedName(name, bsSpace, bsName);
@@ -676,7 +676,7 @@
     }
     return FALSE;
 }
-FX_BOOL	CXML_Element::GetAttrInteger(FX_BSTR space, FX_BSTR name, int& attribute) const
+FX_BOOL	CXML_Element::GetAttrInteger(const CFX_ByteStringC& space, const CFX_ByteStringC& name, int& attribute) const
 {
     const CFX_WideString* pwsValue = m_AttrMap.Lookup(space, name);
     if (pwsValue) {
@@ -685,13 +685,13 @@
     }
     return FALSE;
 }
-FX_BOOL CXML_Element::GetAttrFloat(FX_BSTR name, FX_FLOAT& attribute) const
+FX_BOOL CXML_Element::GetAttrFloat(const CFX_ByteStringC& name, FX_FLOAT& attribute) const
 {
     CFX_ByteStringC bsSpace, bsName;
     FX_XML_SplitQualifiedName(name, bsSpace, bsName);
     return GetAttrFloat(bsSpace, bsName, attribute);
 }
-FX_BOOL CXML_Element::GetAttrFloat(FX_BSTR space, FX_BSTR name, FX_FLOAT& attribute) const
+FX_BOOL CXML_Element::GetAttrFloat(const CFX_ByteStringC& space, const CFX_ByteStringC& name, FX_FLOAT& attribute) const
 {
     const CFX_WideString* pValue = m_AttrMap.Lookup(space, name);
     if (pValue) {
@@ -734,7 +734,7 @@
     }
     return (CXML_Element*)m_Children.GetAt(index + 1);
 }
-FX_DWORD CXML_Element::CountElements(FX_BSTR space, FX_BSTR tag) const
+FX_DWORD CXML_Element::CountElements(const CFX_ByteStringC& space, const CFX_ByteStringC& tag) const
 {
     int count = 0;
     for (int i = 0; i < m_Children.GetSize(); i += 2) {
@@ -749,7 +749,7 @@
     }
     return count;
 }
-CXML_Element* CXML_Element::GetElement(FX_BSTR space, FX_BSTR tag, int index) const
+CXML_Element* CXML_Element::GetElement(const CFX_ByteStringC& space, const CFX_ByteStringC& tag, int index) const
 {
     if (index < 0) {
         return NULL;
@@ -779,7 +779,7 @@
     }
     return (FX_DWORD) - 1;
 }
-const CFX_WideString* CXML_AttrMap::Lookup(FX_BSTR space, FX_BSTR name) const
+const CFX_WideString* CXML_AttrMap::Lookup(const CFX_ByteStringC& space, const CFX_ByteStringC& name) const
 {
     if (m_pMap == NULL) {
         return NULL;
@@ -792,7 +792,7 @@
     }
     return NULL;
 }
-void CXML_AttrMap::SetAt(FX_BSTR space, FX_BSTR name, FX_WSTR value)
+void CXML_AttrMap::SetAt(const CFX_ByteStringC& space, const CFX_ByteStringC& name, const CFX_WideStringC& value)
 {
     for (int i = 0; i < GetSize(); i++) {
         CXML_AttrItem& item = GetAt(i);
@@ -812,7 +812,7 @@
     pItem->m_AttrName = name;
     pItem->m_Value = value;
 }
-void CXML_AttrMap::RemoveAt(FX_BSTR space, FX_BSTR name)
+void CXML_AttrMap::RemoveAt(const CFX_ByteStringC& space, const CFX_ByteStringC& name)
 {
     if (m_pMap == NULL) {
         return;
diff --git a/core/src/fxcrt/fxcrt_platforms.cpp b/core/src/fxcrt/fxcrt_platforms.cpp
index 9ad2e5a..a024375 100644
--- a/core/src/fxcrt/fxcrt_platforms.cpp
+++ b/core/src/fxcrt/fxcrt_platforms.cpp
@@ -39,7 +39,7 @@
 {
     Close();
 }
-FX_BOOL CFXCRT_FileAccess_CRT::Open(FX_BSTR fileName, FX_DWORD dwMode)
+FX_BOOL CFXCRT_FileAccess_CRT::Open(const CFX_ByteStringC& fileName, FX_DWORD dwMode)
 {
     if (m_hFile) {
         return FALSE;
@@ -49,7 +49,7 @@
     m_hFile = FXSYS_fopen(fileName.GetCStr(), strMode.c_str());
     return m_hFile != NULL;
 }
-FX_BOOL CFXCRT_FileAccess_CRT::Open(FX_WSTR fileName, FX_DWORD dwMode)
+FX_BOOL CFXCRT_FileAccess_CRT::Open(const CFX_WideStringC& fileName, FX_DWORD dwMode)
 {
     if (m_hFile) {
         return FALSE;
@@ -138,23 +138,23 @@
 {
     return FALSE;
 }
-FX_BOOL FX_File_Exist(FX_BSTR fileName)
+FX_BOOL FX_File_Exist(const CFX_ByteStringC& fileName)
 {
     return access(fileName.GetCStr(), F_OK) > -1;
 }
-FX_BOOL FX_File_Exist(FX_WSTR fileName)
+FX_BOOL FX_File_Exist(const CFX_WideStringC& fileName)
 {
     return FX_File_Exist(FX_UTF8Encode(fileName));
 }
-FX_BOOL FX_File_Delete(FX_BSTR fileName)
+FX_BOOL FX_File_Delete(const CFX_ByteStringC& fileName)
 {
     return remove(fileName.GetCStr()) > -1;
 }
-FX_BOOL FX_File_Delete(FX_WSTR fileName)
+FX_BOOL FX_File_Delete(const CFX_WideStringC& fileName)
 {
     return FX_File_Delete(FX_UTF8Encode(fileName));
 }
-FX_BOOL FX_File_Copy(FX_BSTR fileNameSrc, FX_BSTR fileNameDst)
+FX_BOOL FX_File_Copy(const CFX_ByteStringC& fileNameSrc, const CFX_ByteStringC& fileNameDst)
 {
     CFXCRT_FileAccess_CRT src, dst;
     if (!src.Open(fileNameSrc, FX_FILEMODE_ReadOnly)) {
@@ -177,15 +177,15 @@
     FX_Free(pBuffer);
     return TRUE;
 }
-FX_BOOL FX_File_Copy(FX_WSTR fileNameSrc, FX_WSTR fileNameDst)
+FX_BOOL FX_File_Copy(const CFX_WideStringC& fileNameSrc, const CFX_WideStringC& fileNameDst)
 {
     return FX_File_Copy(FX_UTF8Encode(fileNameSrc), FX_UTF8Encode(fileNameDst));
 }
-FX_BOOL FX_File_Move(FX_BSTR fileNameSrc, FX_BSTR fileNameDst)
+FX_BOOL FX_File_Move(const CFX_ByteStringC& fileNameSrc, const CFX_ByteStringC& fileNameDst)
 {
     return rename(fileNameSrc.GetCStr(), fileNameDst.GetCStr());
 }
-FX_BOOL FX_File_Move(FX_WSTR fileNameSrc, FX_WSTR fileNameDst)
+FX_BOOL FX_File_Move(const CFX_WideStringC& fileNameSrc, const CFX_WideStringC& fileNameDst)
 {
     return FX_File_Move(FX_UTF8Encode(fileNameSrc), FX_UTF8Encode(fileNameDst));
 }
diff --git a/core/src/fxcrt/fxcrt_platforms.h b/core/src/fxcrt/fxcrt_platforms.h
index be51724..6df020a 100644
--- a/core/src/fxcrt/fxcrt_platforms.h
+++ b/core/src/fxcrt/fxcrt_platforms.h
@@ -17,8 +17,8 @@
 public:
     CFXCRT_FileAccess_CRT();
     virtual ~CFXCRT_FileAccess_CRT();
-    virtual FX_BOOL		Open(FX_BSTR fileName, FX_DWORD dwMode);
-    virtual FX_BOOL		Open(FX_WSTR fileName, FX_DWORD dwMode);
+    virtual FX_BOOL		Open(const CFX_ByteStringC& fileName, FX_DWORD dwMode);
+    virtual FX_BOOL		Open(const CFX_WideStringC& fileName, FX_DWORD dwMode);
     virtual void		Close();
     virtual void		Release();
     virtual FX_FILESIZE	GetSize() const;
diff --git a/core/src/fxcrt/fxcrt_posix.cpp b/core/src/fxcrt/fxcrt_posix.cpp
index 7a4e77a..4f58c10 100644
--- a/core/src/fxcrt/fxcrt_posix.cpp
+++ b/core/src/fxcrt/fxcrt_posix.cpp
@@ -33,7 +33,7 @@
 {
     Close();
 }
-FX_BOOL CFXCRT_FileAccess_Posix::Open(FX_BSTR fileName, FX_DWORD dwMode)
+FX_BOOL CFXCRT_FileAccess_Posix::Open(const CFX_ByteStringC& fileName, FX_DWORD dwMode)
 {
     if (m_nFD > -1) {
         return FALSE;
@@ -43,7 +43,7 @@
     m_nFD = open(fileName.GetCStr(), nFlags, nMasks);
     return m_nFD > -1;
 }
-FX_BOOL CFXCRT_FileAccess_Posix::Open(FX_WSTR fileName, FX_DWORD dwMode)
+FX_BOOL CFXCRT_FileAccess_Posix::Open(const CFX_WideStringC& fileName, FX_DWORD dwMode)
 {
     return Open(FX_UTF8Encode(fileName), dwMode);
 }
@@ -134,23 +134,23 @@
     }
     return !ftruncate(m_nFD, szFile);
 }
-FX_BOOL FX_File_Exist(FX_BSTR fileName)
+FX_BOOL FX_File_Exist(const CFX_ByteStringC& fileName)
 {
     return access(fileName.GetCStr(), F_OK) > -1;
 }
-FX_BOOL FX_File_Exist(FX_WSTR fileName)
+FX_BOOL FX_File_Exist(const CFX_WideStringC& fileName)
 {
     return FX_File_Exist(FX_UTF8Encode(fileName));
 }
-FX_BOOL FX_File_Delete(FX_BSTR fileName)
+FX_BOOL FX_File_Delete(const CFX_ByteStringC& fileName)
 {
     return remove(fileName.GetCStr()) > -1;
 }
-FX_BOOL FX_File_Delete(FX_WSTR fileName)
+FX_BOOL FX_File_Delete(const CFX_WideStringC& fileName)
 {
     return FX_File_Delete(FX_UTF8Encode(fileName));
 }
-FX_BOOL FX_File_Copy(FX_BSTR fileNameSrc, FX_BSTR fileNameDst)
+FX_BOOL FX_File_Copy(const CFX_ByteStringC& fileNameSrc, const CFX_ByteStringC& fileNameDst)
 {
     CFXCRT_FileAccess_Posix src, dst;
     if (!src.Open(fileNameSrc, FX_FILEMODE_ReadOnly)) {
@@ -175,15 +175,15 @@
     FX_Free(pBuffer);
     return TRUE;
 }
-FX_BOOL FX_File_Copy(FX_WSTR fileNameSrc, FX_WSTR fileNameDst)
+FX_BOOL FX_File_Copy(const CFX_WideStringC& fileNameSrc, const CFX_WideStringC& fileNameDst)
 {
     return FX_File_Copy(FX_UTF8Encode(fileNameSrc), FX_UTF8Encode(fileNameDst));
 }
-FX_BOOL FX_File_Move(FX_BSTR fileNameSrc, FX_BSTR fileNameDst)
+FX_BOOL FX_File_Move(const CFX_ByteStringC& fileNameSrc, const CFX_ByteStringC& fileNameDst)
 {
     return rename(fileNameSrc.GetCStr(), fileNameDst.GetCStr());
 }
-FX_BOOL FX_File_Move(FX_WSTR fileNameSrc, FX_WSTR fileNameDst)
+FX_BOOL FX_File_Move(const CFX_WideStringC& fileNameSrc, const CFX_WideStringC& fileNameDst)
 {
     return FX_File_Move(FX_UTF8Encode(fileNameSrc), FX_UTF8Encode(fileNameDst));
 }
diff --git a/core/src/fxcrt/fxcrt_posix.h b/core/src/fxcrt/fxcrt_posix.h
index 0b4509e..c798ad8 100644
--- a/core/src/fxcrt/fxcrt_posix.h
+++ b/core/src/fxcrt/fxcrt_posix.h
@@ -15,8 +15,8 @@
 public:
     CFXCRT_FileAccess_Posix();
     virtual ~CFXCRT_FileAccess_Posix();
-    virtual FX_BOOL		Open(FX_BSTR fileName, FX_DWORD dwMode);
-    virtual FX_BOOL		Open(FX_WSTR fileName, FX_DWORD dwMode);
+    virtual FX_BOOL		Open(const CFX_ByteStringC& fileName, FX_DWORD dwMode);
+    virtual FX_BOOL		Open(const CFX_WideStringC& fileName, FX_DWORD dwMode);
     virtual void		Close();
     virtual void		Release();
     virtual FX_FILESIZE	GetSize() const;
diff --git a/core/src/fxcrt/fxcrt_windows.cpp b/core/src/fxcrt/fxcrt_windows.cpp
index 05ed619..c16f256 100644
--- a/core/src/fxcrt/fxcrt_windows.cpp
+++ b/core/src/fxcrt/fxcrt_windows.cpp
@@ -7,7 +7,7 @@
 #include "../../include/fxcrt/fx_ext.h"
 #include "fxcrt_windows.h"
 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
-FX_BOOL FX_File_Exist(FX_BSTR fileName)
+FX_BOOL FX_File_Exist(const CFX_ByteStringC& fileName)
 {
     FX_DWORD dwAttri = ::GetFileAttributesA(fileName.GetCStr());
     if (dwAttri == -1) {
@@ -15,7 +15,7 @@
     }
     return (dwAttri & FILE_ATTRIBUTE_DIRECTORY) == 0;
 }
-FX_BOOL FX_File_Exist(FX_WSTR fileName)
+FX_BOOL FX_File_Exist(const CFX_WideStringC& fileName)
 {
     FX_DWORD dwAttri = ::GetFileAttributesW((LPCWSTR)fileName.GetPtr());
     if (dwAttri == -1) {
@@ -54,7 +54,7 @@
 {
     Close();
 }
-FX_BOOL CFXCRT_FileAccess_Win64::Open(FX_BSTR fileName, FX_DWORD dwMode)
+FX_BOOL CFXCRT_FileAccess_Win64::Open(const CFX_ByteStringC& fileName, FX_DWORD dwMode)
 {
     if (m_hFile) {
         return FALSE;
@@ -67,7 +67,7 @@
     }
     return m_hFile != NULL;
 }
-FX_BOOL CFXCRT_FileAccess_Win64::Open(FX_WSTR fileName, FX_DWORD dwMode)
+FX_BOOL CFXCRT_FileAccess_Win64::Open(const CFX_WideStringC& fileName, FX_DWORD dwMode)
 {
     if (m_hFile) {
         return FALSE;
@@ -187,27 +187,27 @@
     }
     return ::SetEndOfFile(m_hFile);
 }
-FX_BOOL FX_File_Delete(FX_BSTR fileName)
+FX_BOOL FX_File_Delete(const CFX_ByteStringC& fileName)
 {
     return ::DeleteFileA(fileName.GetCStr());
 }
-FX_BOOL FX_File_Delete(FX_WSTR fileName)
+FX_BOOL FX_File_Delete(const CFX_WideStringC& fileName)
 {
     return ::DeleteFileW((LPCWSTR)fileName.GetPtr());
 }
-FX_BOOL FX_File_Copy(FX_BSTR fileNameSrc, FX_BSTR fileNameDst)
+FX_BOOL FX_File_Copy(const CFX_ByteStringC& fileNameSrc, const CFX_ByteStringC& fileNameDst)
 {
     return ::CopyFileA(fileNameSrc.GetCStr(), fileNameDst.GetCStr(), FALSE);
 }
-FX_BOOL FX_File_Copy(FX_WSTR fileNameSrc, FX_WSTR fileNameDst)
+FX_BOOL FX_File_Copy(const CFX_WideStringC& fileNameSrc, const CFX_WideStringC& fileNameDst)
 {
     return ::CopyFileW((LPCWSTR)fileNameSrc.GetPtr(), (LPCWSTR)fileNameDst.GetPtr(), FALSE);
 }
-FX_BOOL FX_File_Move(FX_BSTR fileNameSrc, FX_BSTR fileNameDst)
+FX_BOOL FX_File_Move(const CFX_ByteStringC& fileNameSrc, const CFX_ByteStringC& fileNameDst)
 {
     return ::MoveFileA(fileNameSrc.GetCStr(), fileNameDst.GetCStr());
 }
-FX_BOOL FX_File_Move(FX_WSTR fileNameSrc, FX_WSTR fileNameDst)
+FX_BOOL FX_File_Move(const CFX_WideStringC& fileNameSrc, const CFX_WideStringC& fileNameDst)
 {
     return ::MoveFileW((LPCWSTR)fileNameSrc.GetPtr(), (LPCWSTR)fileNameDst.GetPtr());
 }
diff --git a/core/src/fxcrt/fxcrt_windows.h b/core/src/fxcrt/fxcrt_windows.h
index 32531d5..8dd2cdd 100644
--- a/core/src/fxcrt/fxcrt_windows.h
+++ b/core/src/fxcrt/fxcrt_windows.h
@@ -15,8 +15,8 @@
 public:
     CFXCRT_FileAccess_Win64();
     virtual ~CFXCRT_FileAccess_Win64();
-    virtual FX_BOOL		Open(FX_BSTR fileName, FX_DWORD dwMode);
-    virtual FX_BOOL		Open(FX_WSTR fileName, FX_DWORD dwMode);
+    virtual FX_BOOL		Open(const CFX_ByteStringC& fileName, FX_DWORD dwMode);
+    virtual FX_BOOL		Open(const CFX_WideStringC& fileName, FX_DWORD dwMode);
     virtual void		Close();
     virtual void		Release();
     virtual FX_FILESIZE	GetSize() const;
diff --git a/core/src/fxcrt/xml_int.h b/core/src/fxcrt/xml_int.h
index 0220301..9469a75 100644
--- a/core/src/fxcrt/xml_int.h
+++ b/core/src/fxcrt/xml_int.h
@@ -153,11 +153,11 @@
     void			GetAttrValue(CFX_WideString &value);
     FX_DWORD		GetCharRef();
     void			GetTagName(CFX_ByteString &space, CFX_ByteString &name, FX_BOOL &bEndTag, FX_BOOL bStartTag = FALSE);
-    void			SkipLiterals(FX_BSTR str);
+    void			SkipLiterals(const CFX_ByteStringC& str);
     CXML_Element*	ParseElement(CXML_Element* pParent, FX_BOOL bStartTag = FALSE);
-    void			InsertContentSegment(FX_BOOL bCDATA, FX_WSTR content, CXML_Element* pElement);
+    void			InsertContentSegment(FX_BOOL bCDATA, const CFX_WideStringC& content, CXML_Element* pElement);
     void			InsertCDATASegment(CFX_UTF8Decoder& decoder, CXML_Element* pElement);
 };
-void FX_XML_SplitQualifiedName(FX_BSTR bsFullName, CFX_ByteStringC &bsSpace, CFX_ByteStringC &bsName);
+void FX_XML_SplitQualifiedName(const CFX_ByteStringC& bsFullName, CFX_ByteStringC &bsSpace, CFX_ByteStringC &bsName);
 
 #endif  // CORE_SRC_FXCRT_XML_INT_H_
diff --git a/core/src/fxge/android/fpf_skiafont.cpp b/core/src/fxge/android/fpf_skiafont.cpp
index 213a659..e94f20f 100644
--- a/core/src/fxge/android/fpf_skiafont.cpp
+++ b/core/src/fxge/android/fpf_skiafont.cpp
@@ -166,7 +166,7 @@
     }
     return dwSize;
 }
-FX_BOOL CFPF_SkiaFont::InitFont(CFPF_SkiaFontMgr *pFontMgr, CFPF_SkiaFontDescriptor *pFontDes, FX_BSTR bsFamily, FX_DWORD dwStyle, uint8_t uCharset)
+FX_BOOL CFPF_SkiaFont::InitFont(CFPF_SkiaFontMgr *pFontMgr, CFPF_SkiaFontDescriptor *pFontDes, const CFX_ByteStringC& bsFamily, FX_DWORD dwStyle, uint8_t uCharset)
 {
     if (!pFontMgr || !pFontDes) {
         return FALSE;
diff --git a/core/src/fxge/android/fpf_skiafont.h b/core/src/fxge/android/fpf_skiafont.h
index af33402..f3a61c9 100644
--- a/core/src/fxge/android/fpf_skiafont.h
+++ b/core/src/fxge/android/fpf_skiafont.h
@@ -45,7 +45,7 @@
     virtual int32_t		GetHeight() const;
     virtual int32_t		GetItalicAngle() const;
     virtual FX_DWORD		GetFontData(FX_DWORD dwTable, uint8_t* pBuffer, FX_DWORD dwSize);
-    FX_BOOL					InitFont(CFPF_SkiaFontMgr *pFontMgr, CFPF_SkiaFontDescriptor *pFontDes, FX_BSTR bsFamily, FX_DWORD dwStyle, uint8_t uCharset);
+    FX_BOOL					InitFont(CFPF_SkiaFontMgr *pFontMgr, CFPF_SkiaFontDescriptor *pFontDes, const CFX_ByteStringC& bsFamily, FX_DWORD dwStyle, uint8_t uCharset);
 protected:
     CFPF_SkiaFontMgr		*m_pFontMgr;
     CFPF_SkiaFontDescriptor	*m_pFontDes;
diff --git a/core/src/fxge/android/fpf_skiafontmgr.cpp b/core/src/fxge/android/fpf_skiafontmgr.cpp
index 214d674..0851a93 100644
--- a/core/src/fxge/android/fpf_skiafontmgr.cpp
+++ b/core/src/fxge/android/fpf_skiafontmgr.cpp
@@ -181,7 +181,7 @@
     }
     return FPF_SKIACHARSET_Default;
 }
-static FX_DWORD FPF_SKIANormalizeFontName(FX_BSTR bsfamily)
+static FX_DWORD FPF_SKIANormalizeFontName(const CFX_ByteStringC& bsfamily)
 {
     FX_DWORD dwHash = 0;
     int32_t iLength = bsfamily.GetLength();
@@ -195,7 +195,7 @@
     }
     return dwHash;
 }
-static FX_DWORD	FPF_SKIAGetFamilyHash(FX_BSTR bsFamily, FX_DWORD dwStyle, uint8_t uCharset)
+static FX_DWORD	FPF_SKIAGetFamilyHash(const CFX_ByteStringC& bsFamily, FX_DWORD dwStyle, uint8_t uCharset)
 {
     CFX_ByteString bsFont(bsFamily);
     if (dwStyle & FXFONT_BOLD) {
@@ -215,13 +215,13 @@
     return (uCharset == FXFONT_GB2312_CHARSET) || (uCharset == FXFONT_CHINESEBIG5_CHARSET)
            || (uCharset == FXFONT_HANGEUL_CHARSET) || (uCharset == FXFONT_SHIFTJIS_CHARSET);
 }
-static FX_BOOL FPF_SkiaMaybeSymbol(FX_BSTR bsFacename)
+static FX_BOOL FPF_SkiaMaybeSymbol(const CFX_ByteStringC& bsFacename)
 {
     CFX_ByteString bsName = bsFacename;
     bsName.MakeLower();
     return bsName.Find("symbol") > -1;
 }
-static FX_BOOL FPF_SkiaMaybeArabic(FX_BSTR bsFacename)
+static FX_BOOL FPF_SkiaMaybeArabic(const CFX_ByteStringC& bsFacename)
 {
     CFX_ByteString bsName = bsFacename;
     bsName.MakeLower();
@@ -273,13 +273,13 @@
 void CFPF_SkiaFontMgr::LoadPrivateFont(IFX_FileRead* pFontFile)
 {
 }
-void CFPF_SkiaFontMgr::LoadPrivateFont(FX_BSTR bsFileName)
+void CFPF_SkiaFontMgr::LoadPrivateFont(const CFX_ByteStringC& bsFileName)
 {
 }
 void CFPF_SkiaFontMgr::LoadPrivateFont(void* pBuffer, size_t szBuffer)
 {
 }
-IFPF_Font* CFPF_SkiaFontMgr::CreateFont(FX_BSTR bsFamilyname, uint8_t uCharset, FX_DWORD dwStyle, FX_DWORD dwMatch)
+IFPF_Font* CFPF_SkiaFontMgr::CreateFont(const CFX_ByteStringC& bsFamilyname, uint8_t uCharset, FX_DWORD dwStyle, FX_DWORD dwMatch)
 {
     FX_DWORD dwHash = FPF_SKIAGetFamilyHash(bsFamilyname, dwStyle, uCharset);
     IFPF_Font *pFont = NULL;
@@ -388,7 +388,7 @@
     FXFT_Set_Pixel_Sizes(face, 0, 64);
     return face;
 }
-FXFT_Face CFPF_SkiaFontMgr::GetFontFace(FX_BSTR bsFile, int32_t iFaceIndex )
+FXFT_Face CFPF_SkiaFontMgr::GetFontFace(const CFX_ByteStringC& bsFile, int32_t iFaceIndex )
 {
     if (bsFile.IsEmpty()) {
         return NULL;
@@ -425,7 +425,7 @@
     FXFT_Set_Pixel_Sizes(face, 0, 64);
     return face;
 }
-void CFPF_SkiaFontMgr::ScanPath(FX_BSTR path)
+void CFPF_SkiaFontMgr::ScanPath(const CFX_ByteStringC& path)
 {
     void *handle = FX_OpenFolder(path.GetCStr());
     if (!handle) {
@@ -456,7 +456,7 @@
     }
     FX_CloseFolder(handle);
 }
-void CFPF_SkiaFontMgr::ScanFile(FX_BSTR file)
+void CFPF_SkiaFontMgr::ScanFile(const CFX_ByteStringC& file)
 {
     FXFT_Face face = GetFontFace(file);
     if (face) {
diff --git a/core/src/fxge/android/fpf_skiafontmgr.h b/core/src/fxge/android/fpf_skiafontmgr.h
index ba9ea91..5acf14e 100644
--- a/core/src/fxge/android/fpf_skiafontmgr.h
+++ b/core/src/fxge/android/fpf_skiafontmgr.h
@@ -97,16 +97,16 @@
     FX_BOOL					InitFTLibrary();
     virtual void			LoadSystemFonts();
     virtual void			LoadPrivateFont(IFX_FileRead* pFontFile);
-    virtual void			LoadPrivateFont(FX_BSTR bsFileName);
+    virtual void			LoadPrivateFont(const CFX_ByteStringC& bsFileName);
     virtual void			LoadPrivateFont(void* pBuffer, size_t szBuffer);
 
-    virtual IFPF_Font*		CreateFont(FX_BSTR bsFamilyname, uint8_t uCharset, FX_DWORD dwStyle, FX_DWORD dwMatch = 0);
+    virtual IFPF_Font*		CreateFont(const CFX_ByteStringC& bsFamilyname, uint8_t uCharset, FX_DWORD dwStyle, FX_DWORD dwMatch = 0);
     FXFT_Face				GetFontFace(IFX_FileRead *pFileRead, int32_t iFaceIndex = 0);
-    FXFT_Face				GetFontFace(FX_BSTR bsFile, int32_t iFaceIndex = 0);
+    FXFT_Face				GetFontFace(const CFX_ByteStringC& bsFile, int32_t iFaceIndex = 0);
     FXFT_Face				GetFontFace(const uint8_t* pBuffer, size_t szBuffer, int32_t iFaceIndex = 0);
 protected:
-    void				ScanPath(FX_BSTR path);
-    void				ScanFile(FX_BSTR file);
+    void				ScanPath(const CFX_ByteStringC& path);
+    void				ScanFile(const CFX_ByteStringC& file);
     void				ReportFace(FXFT_Face face, CFPF_SkiaFontDescriptor *pFontDesc);
     void				OutputSystemFonts();
     FX_BOOL				m_bLoaded;
diff --git a/core/src/fxge/ge/fx_ge_fontmap.cpp b/core/src/fxge/ge/fx_ge_fontmap.cpp
index afa9918..ba5725d 100644
--- a/core/src/fxge/ge/fx_ge_fontmap.cpp
+++ b/core/src/fxge/ge/fx_ge_fontmap.cpp
@@ -1298,7 +1298,7 @@
         delete (CFontFaceInfo*)value;
     }
 }
-void CFX_FolderFontInfo::AddPath(FX_BSTR path)
+void CFX_FolderFontInfo::AddPath(const CFX_ByteStringC& path)
 {
     m_PathList.Add(path);
 }
diff --git a/core/src/reflow/layoutprovider_taggedpdf.cpp b/core/src/reflow/layoutprovider_taggedpdf.cpp
index 4a5a22b..57ce430 100644
--- a/core/src/reflow/layoutprovider_taggedpdf.cpp
+++ b/core/src/reflow/layoutprovider_taggedpdf.cpp
@@ -21,7 +21,7 @@
     }
     m_ChildArray.RemoveAll();
 }
-LayoutType CPDF_LayoutElement::ConvertLayoutType(FX_BSTR name)
+LayoutType CPDF_LayoutElement::ConvertLayoutType(const CFX_ByteStringC& name)
 {
     if(name == (const char*)("Document")) {
         return LayoutDocument;
@@ -127,7 +127,7 @@
 }
 CFX_ByteStringC CPDF_LayoutElement::ConvertLayoutType(LayoutType type)
 {
-    FX_BSTR name = "";
+    const CFX_ByteStringC& name = "";
     if(type == LayoutArifact) {
         return "Arifact";
     } else if( type == LayoutDocument) {
diff --git a/core/src/reflow/layoutprovider_taggedpdf.h b/core/src/reflow/layoutprovider_taggedpdf.h
index 3e11f17..fa6c994 100644
--- a/core/src/reflow/layoutprovider_taggedpdf.h
+++ b/core/src/reflow/layoutprovider_taggedpdf.h
@@ -36,7 +36,7 @@
     CPDF_StructElement* m_pTaggedElement;
     CPDF_LayoutElement* m_pParentElement;
     CFX_PtrArray	m_ChildArray;
-    LayoutType ConvertLayoutType(FX_BSTR name);
+    LayoutType ConvertLayoutType(const CFX_ByteStringC& name);
     CFX_ByteStringC ConvertLayoutType(LayoutType type);
     CFX_ByteStringC ConvertLayoutAttr(LayoutAttr attr);
     LayoutEnum ConvertLayoutEnum(CFX_ByteStringC Enum);
diff --git a/fpdfsdk/src/fpdf_ext.cpp b/fpdfsdk/src/fpdf_ext.cpp
index 613a5fd..0168375 100644
--- a/fpdfsdk/src/fpdf_ext.cpp
+++ b/fpdfsdk/src/fpdf_ext.cpp
@@ -215,27 +215,30 @@
 
 DLLEXPORT int FPDFDoc_GetPageMode(FPDF_DOCUMENT document)
 {
-	if (!document) return PAGEMODE_UNKNOWN;
-	CPDF_Dictionary *pRoot = ((CPDF_Document*)document)->GetRoot();
-	if (!pRoot)
-		return PAGEMODE_UNKNOWN;
-	CPDF_Object* pName = pRoot->GetElement("PageMode");
-	if (!pName)
-		return PAGEMODE_USENONE;
-	CFX_ByteString strPageMode = pName->GetString();
-	
-	if (strPageMode.IsEmpty()||strPageMode.EqualNoCase(FX_BSTR("UseNone")))
-		return PAGEMODE_USENONE;
-	else if (strPageMode.EqualNoCase(FX_BSTR("UseOutlines")))
-		return PAGEMODE_USEOUTLINES;
-	else if (strPageMode.EqualNoCase(FX_BSTR("UseThumbs")))
-		return PAGEMODE_USETHUMBS;
-	else if (strPageMode.EqualNoCase(FX_BSTR("FullScreen")))
-		return PAGEMODE_FULLSCREEN;
-	else if (strPageMode.EqualNoCase(FX_BSTR("UseOC")))
-		return PAGEMODE_USEOC;
-	else if (strPageMode.EqualNoCase(FX_BSTR("UseAttachments")))
-		return PAGEMODE_USEATTACHMENTS;
+    if (!document)
+        return PAGEMODE_UNKNOWN;
 
-	return PAGEMODE_UNKNOWN;
+    CPDF_Dictionary* pRoot = ((CPDF_Document*)document)->GetRoot();
+    if (!pRoot)
+        return PAGEMODE_UNKNOWN;
+
+    CPDF_Object* pName = pRoot->GetElement("PageMode");
+    if (!pName)
+        return PAGEMODE_USENONE;
+
+    CFX_ByteString strPageMode = pName->GetString();
+    if (strPageMode.IsEmpty()||strPageMode.EqualNoCase("UseNone"))
+        return PAGEMODE_USENONE;
+    if (strPageMode.EqualNoCase("UseOutlines"))
+        return PAGEMODE_USEOUTLINES;
+    if (strPageMode.EqualNoCase("UseThumbs"))
+        return PAGEMODE_USETHUMBS;
+    if (strPageMode.EqualNoCase("FullScreen"))
+        return PAGEMODE_FULLSCREEN;
+    if (strPageMode.EqualNoCase("UseOC"))
+        return PAGEMODE_USEOC;
+    if (strPageMode.EqualNoCase("UseAttachments"))
+        return PAGEMODE_USEATTACHMENTS;
+
+    return PAGEMODE_UNKNOWN;
 }