กล่าวถึงที่นี่แมโคแปลงสายอักขระถูกต้องสำหรับทั้ง ATL และ MFC ดูข้อมูลเพิ่มเติมในการแปลงสตริ MFC, TN059: ใช้ MFC MBCS/Unicode Conversion แมและMFC แมโครและ Globals?
ไวยากรณ์ของแมโครในการแปลงสตริงที่ไม่:
ชื่อแมโคร ( string_address )
ตัวอย่างเช่น:
A2W(lpa)
ในชื่อแมโคร ชนิดต้นทางสายอักขระที่อยู่ทางด้านซ้าย (ตัวอย่างเช่นA) และชนิดสายปลายทางที่อยู่บนด้านขวา (ตัวอย่างเช่นW) Aย่อมาจากLPSTR, OLE stands สำหรับLPOLESTR, T stands สำหรับLPTSTRและ stands WสำหรับLPWSTR?
ปานA2Wแปลงเป็นLPSTRมีLPWSTR, OLE2Tแปลงข้อLPOLESTRข้อLPTSTRและอื่น ๆ?
สายปลายทางถูกสร้างขึ้นโดยใช้_allocaยกเว้นเมื่อชนิดปลายทางคือBSTR ใช้_allocaจัดสรรหน่วยความจำออกจากกองซ้อน ดังนั้นเมื่อมีการส่งกลับของฟังก์ชัน มันเป็นอัตโนมัติล้าง?
ถ้ามีตัวCในชื่อแมโคร แมโครแปลงสตริconst ตัวอย่างเช่นW2CAแปลงการLPWSTRการLPCSTR?
หมายเหตุnbsp เมื่อต้องการใช้แมโคแปลงสตริ ATL ระบุแมโคUSES_CONVERSIONจุดเริ่มต้นของฟังก์ชันของคุณเพื่อหลีกเลี่ยงข้อผิดพลาดของคอมไพเลอร์ ตัวอย่างเช่น(&N):
โมฆะ func (LPSTR lpsz)
{
nbsp USES_CONVERSION
...
LPWSTR x = A2W(lpsz)
/ / ทำอะไรกับ x
...
}(&N)
ลักษณะการทำงานของแมโครที่แปลงสตริ ATL ขึ้นกับลักษณะพิเศษ ฟในคอมไพเลอร์ถ้ามี ถ้าชนิดต้นทางและปลายทางจะเหมือนกัน ไม่มีทำแปลง คอมไพล์เลอร์ไดเรกทีฟฐานเปลี่ยนTและOLEเป็นดังนี้:
| ลักษณะพิเศษฟในคอมไพเลอร์ | T กลายเป็น | OLE กลายเป็น |
| ไม่มี | A | W |
| _UNICODE | W | W |
| OLE2ANSI | A | A |
| _UNICODEและOLE2ANSI | W | A |
ตารางต่อไปนี้แสดงรายการแมโครในการแปลงสตริ ATL?
แมโครการแปลงสตริ ATL
| A2BSTR | OLE2A | T2A | W2A |
| A2COLE | OLE2BSTR | T2BSTR | W2BSTR |
| A2CT | OLE2CA | T2CA | W2CA |
| A2CW | OLE2CT | T2COLE | W2COLE |
| A2OLE | OLE2CW | T2CW | W2CT |
| A2T | OLE2T | T2OLE | W2OLE |
| A2W | OLE2W | T2W | W2T |
ATL แมโครและฟังก์ชันที่ส่วนกลาง
ดูเพิ่มเติม