将System::String::Format与非托管代码中的LPTSTR(wchar_t*)Sting一起使用

将System::String::Format与非托管代码中的LPTSTR(wchar_t*)Sting一起使用,string,c++-cli,String,C++ Cli,我有一个LPTSTR(wchar\u t*)字符串,它是从FormatMessage返回的,我想在string::Format中使用它,但我不知道如何指定它。考虑这些代码行: wchar_t * szErrMsg = L"Error Msg from Unmanaged"; // faking the message from FormatMessage System::String^ AString = gcnew System::String(szErrMsg); // works Sys

我有一个LPTSTR(wchar\u t*)字符串,它是从FormatMessage返回的,我想在string::Format中使用它,但我不知道如何指定它。考虑这些代码行:

wchar_t * szErrMsg = L"Error Msg from Unmanaged";  // faking the message from FormatMessage
System::String^ AString = gcnew System::String(szErrMsg); // works
System::String^ BString = System::String::Format(L"{0}.", AString); // works
System::String^ CString = System::String::Format(L"{0}.", szErrMsg); // no overloads match
System::String^ DString = System::String::Format(L"{0}.", L"Error Msg from Unmanaged"); // works
绷带和绷带很好。有趣的是,DString也可以。但这不是我的错

我当然可以将消息的所有部分都更改为::String对象(比如AString),然后将整个消息格式化为另一个字符串(比如BString),但如果可以正确指定CString,那么我宁愿放弃它。我怀疑这是可能的,因为DString有效

我还尝试了::StringBuilder,并通过.Append获得了一些有趣的结果——显然编译器出于某种原因认为szerrmg是一个bool。它甚至给了我关于布尔转换的性能警告

最后一条消息大约有三个部分,如果我可以使用对::Format的一个调用来构建它,那就太好了


建议?

String::Format()的第二个参数是参数数组。大致类似于C语言中用于printf()等函数的
。在引擎盖下,它是一个受管理的对象数组,声明在C++/CLI语法中如下所示:

   static String^ Format(String^ format, ... array<Object^>^ args);

胡扯!我希望能够告诉::Format参数是非托管字符串指针,并请将其转换(就像::字符串构造函数能够做的那样)作为过程的一部分。非常感谢。
   String^ CString = String::Format("{0}.", gcnew String(szErrMsg));