MAPI (Windows Mail API)에는 UTF8과 관련된 문제가 있습니다 (또는 어쩌면 내가 잘못 했음).WIndows MAPI unicode 문제
코드 샘플 :
HMODULE m_hLib = LoadLibraryA("MAPI32.DLL");
if (m_hLib == NULL)
return SEND_MAIL_CANCELED;
LPMAPISENDMAIL SendMail;
SendMail = (LPMAPISENDMAIL) GetProcAddress(m_hLib, "MAPISendMail");
if (!SendMail)
return;
MapiFileDesc fileDesc;
ZeroMemory(&fileDesc, sizeof(fileDesc));
fileDesc.nPosition = (ULONG) -1;
fileDesc.lpszPathName = (LPSTR) filePath.toUtf8();
fileDesc.lpszFileName = (LPSTR) fileName.toUtf8();
MapiRecipDesc recipientData;
ZeroMemory(&recipientData, sizeof(recipientData));
recipientData.lpszName = (LPSTR) recipient.toUtf8();
recipientData.ulRecipClass = MAPI_TO;
MapiMessage message;
ZeroMemory(&message, sizeof(message));
message.ulReserved = CP_UTF8;
message.lpszSubject = (LPSTR) title.toUtf8();
message.nFileCount = 1;
message.lpFiles = &fileDesc;
message.nRecipCount = 1;
message.lpRecips = &recipientData;
int nError = SendMail(0, NULL, &message, MAPI_LOGON_UI | MAPI_DIALOG, 0);
title
, filePath
, fileName
및 recipient
모든 std::string
들입니다. 내가 아는 한, UTF8은 아스키 (ASCII도 가능)와 호환되므로 문자열은 아무런 문제없이 그러한 값을 유지할 수 있습니다.
나는 이런 식으로 wstring을에서 UTF8로 변환 해요 :
int requiredSize = WideCharToMultiByte(CP_UTF8, 0, data.c_str(), -1, 0, 0, 0, 0);
if(requiredSize > 0)
{
std::vector<char> buffer(requiredSize);
WideCharToMultiByte(CP_UTF8, 0, data.c_str(), -1, &buffer[0], requiredSize, 0, 0);
this->container.append(buffer.begin(), buffer.end() - 1);
}
container
는 std::string
개체입니다.
실제 질문은 무엇입니까? 당신은 무엇을 기대하고 있으며, 당신은 무엇을 얻고 있습니까? –