FormatMessage 并不总是提供正确的输出 - 某些值被复制 - 为什么?

问题描述

STRINGTABLE 项目:

  • ID:IDS_TPL_SWAP_CONFIRMATION
  • 值:5149
  • 标题Swap assignments:\n\n%1 - %2 [%3]\n%4 - %5 [%6]\n\nPlease confirm.

有时当我尝试这段代码时:

CString strPrompt = _T("");
strPrompt.FormatMessage(IDS_TPL_SWAP_CONFIRMATION,m_pEntry->GetMeetingDateAsstring(),(LPCTSTR)strExistingName,(LPCTSTR)strExistingDescription,pReplacement->GetMeetingDateAsstring(),(LPCTSTR)getter(pReplacement),(LPCTSTR)strReplacementDescription);

我有时发现 %1 值与 %4 值重复,即使 pReplacement->GetMeetingDateAsstring() 实际上是不同的日期。

最后我把代码改成这样:

strPrompt.LoadString(IDS_TPL_SWAP_CONFIRMATION);
strPrompt.Replace(_T("%1"),m_pEntry->GetMeetingDateAsstring());
strPrompt.Replace(_T("%2"),strExistingName);
strPrompt.Replace(_T("%3"),strExistingDescription);
strPrompt.Replace(_T("%4"),pReplacement->GetMeetingDateAsstring());
strPrompt.Replace(_T("%5"),getter(pReplacement));
strPrompt.Replace(_T("%6"),strReplacementDescription);

这保证对我有用。我使用 FormatMessage 语法是因为我的应用程序支持超过 50 种语言,而且我无法确定每种语言是否都需要相同顺序的数据。

如前所述,所有数据都是正确的,除了在某些情况下,它会在最终输出中将第一个日期重新用于第四个项目。 FormatString 有什么我需要了解的问题吗?

我的解决方法在会议时间内对我来说效果很好。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)