我想 dll 將一些函式從 cpp 匯出到 dart,為了做到這一點,我需要創建一個帶有指標引數的函式,我將在其中發送文本。
但經過多次搜索,我發現沒有任何解決方案有效。
我的問題是:如何創建一個帶wchar_t*引數的函式,并用文本填充該變數?我對cpp指標一無所知,我通常不在cpp中編碼。
這是我的代碼,它給出了錯誤:
//extern "C" __declspec(dllexport)
void getAudioDevices(wchar_t* output, int outSize)
{
std::vector<DeviceProps> result = EnumAudioDevices(eRender);
std::wstring listOutput(L"");
if (!result.empty())
{
for (const auto& device : result)
{
std::wstring info(L"");
info = device.name; //PCWSTR
info = L"\n";
info = device.iconInfo; //PCWSTR
info = L"\n";
info = device.id; //LPWSTR
info = L"\n";
info = device.isActive ? L"true" : L"false";
info = L"\n[][][][]\n";
listOutput = info.c_str();
}
}
wcscpy_s(output, outSize, listOutput.c_str());
}
int wmain(int argc, WCHAR* argv[])
{
WCHAR output[1000];
getAudioDevices(output, sizeof(output));
cout << output << endl;
}
uj5u.com熱心網友回復:
sizeof(output)將回傳陣列的位元組數。在 Windows 上,這將是 2000 而不是 1000,因為每個 wchar_t 是 2 個位元組長。
但是傳遞給 wcscpy_s 的值是陣列可以容納的寬字符數。您的陣列可以容納 1000 個 wchar_t。但是您實際上是在告訴 wcscpy_s 它可以容納更多。
改變這個:
getAudioDevices(output, sizeof(output));
對此:
getAudioDevices(output, sizeof(output)/sizeof(output[0]) );
也宣告outSize為型別size_t而不是int
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/495524.html
上一篇:如何用樹以角度下載檔案?
