正在从C#字符串转换为C++wchar_t[非托管]
本文关键字:C++wchar 字符串 转换 | 更新日期: 2023-09-27 18:25:07
我正在开发一个WinRT应用程序,在该应用程序中,我需要将设备ID从C#类传递到C++对象。ID的格式为:
''?'SWD#MMDEVAPI#{0.0.0.00000000}.{572cb138-dda1-4723-90d7-373f04b795fb}#{e6327cad-dcec-4949-ae8a-991e976a79d2}
这在C++中运行良好,如果我将其转换为:
L"''''?''SWD#MMDEVAPI#{0.0.0.00000000}.{572cb138-dda1-4723-90d7-373f04b795fb}#{e6327cad-dcec-4949-ae8a-991e976a79d2}"
然而,如果我将它作为System.String从C#类传递给C++,并将其强制转换为LPCWSTR,它就不起作用了。
C++代码:
UniversalAudioPlayer::UniversalAudioPlayer(String^ deviceID)
{
HRESULT hr = XAudio2Create(&xAudio);
if (FAILED(hr))
ref new COMException(hr, "XAudio2Create failure");
XAUDIO2_DEBUG_CONFIGURATION debugConfig = { 0 };
debugConfig.TraceMask = XAUDIO2_LOG_DETAIL | XAUDIO2_LOG_WARNINGS;
xAudio->SetDebugConfiguration(&debugConfig);
hr = xAudio->CreateMasteringVoice(&masteringVoice, 0U, 0U, 0U, (LPCWSTR)deviceID);
if (FAILED(hr))
ref new COMException(hr, "Could not create mastdsdering voice");
xAudio->StartEngine();
}
C#代码:
UniversalAudioPlayer player = new UniversalAudioPlayer("''''?''SWD#MMDEVAPI#{0.0.0.00000000}.{41a5b8e4-ad46-4bcb-b8a0-3621edafd176}#{e6327cad-dcec-4949-ae8a-991e976a79d2}");
我无法包含
#include < vcclr.h >
在我的C++类中,因为WinRT不支持托管程序集。
请给我建议任何解决方案。提前谢谢。
您可以使用String::Data方法将Platform::String^转换为wchar_t*。
hr = xAudio->CreateMasteringVoice(&masteringVoice, 0U, 0U, 0U, deviceID->Data);