gpt4 book ai didi

c# - 从 C# 字符串转换为 C++ wchar_t [非托管]

转载 作者:行者123 更新时间:2023-11-28 02:15:59 26 4
gpt4 key购买 nike

我正在开发一个 WinRT 应用程序,我需要在其中将设备 ID 从 C# 类传递到 C++ 对象。 ID格式为:

\\?\SWD#MMDEVAPI#{0.0.0.00000000}.{572cb138-dda1-4723-90d7-373f04b795fb}#{e6327cad-dcec-4949-ae8a-991e976a79d2}

如果我将其强制转换为:

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 不支持托管程序集。

请给我建议任何解决方案。提前致谢。

最佳答案

您可以从 Platform::String 转换^ 到带有字符串的 wchar_t*::Data方法。

hr = xAudio->CreateMasteringVoice(&masteringVoice, 0U, 0U, 0U, deviceID->Data);

关于c# - 从 C# 字符串转换为 C++ wchar_t [非托管],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34017286/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com