从 C# 字符串转换为 C++ wchar_t [非托管]
Converting from C# string to C++ wchar_t [unmanaged]
我正在开发一个 WinRT 应用程序,我需要在其中将设备 ID 从 C# class 传递到 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# class 传递到 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}");
我无法包含[=36=]
#include < vcclr.h >
在我的 C++ 中 class 或者因为 WinRT 不支持托管程序集。
请给我任何解决方案。提前致谢。
您可以从 Platform::String^ to a wchar_t* with the String::Data 方法转换。
hr = xAudio->CreateMasteringVoice(&masteringVoice, 0U, 0U, 0U, deviceID->Data);
我正在开发一个 WinRT 应用程序,我需要在其中将设备 ID 从 C# class 传递到 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# class 传递到 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}");
我无法包含[=36=]
#include < vcclr.h >
在我的 C++ 中 class 或者因为 WinRT 不支持托管程序集。
请给我任何解决方案。提前致谢。
您可以从 Platform::String^ to a wchar_t* with the String::Data 方法转换。
hr = xAudio->CreateMasteringVoice(&masteringVoice, 0U, 0U, 0U, deviceID->Data);