Greg Atkinson Ответов: 2

Как преобразовать переменную char в BSTR в языке C?


У меня есть устаревшая программа, написанная на языке Си, и мне приходится добавлять вызовы к COM-объекту. Проблема, с которой я сталкиваюсь, заключается в передаче данных функциям в COM-модуле. Я могу передать литералы в модуль, но как я могу преобразовать переменные в BSTR?

Пример с литералами:

BSTR baseUrl = SysAllocString(L"www.google.com");
BSTR sessionName = SysAllocString(L"");
VARIANT_BOOL returnVal;
result = viewer->pVtbl->launchSession(viewer, baseUrl, sessionName, &returnVal);
if (result != S_OK)
{
    printf("COM call to WebViewer.launchSession failed\n");
    SysFreeString(baseUrl);
    SysFreeString(sessionName);
    return 1;
}


Вместо жесткого кодирования "www.google.com" мне нужно использовать переменную, определенную как char [215].

Что я уже пробовал:

Я нашел
_com_util::ConvertStringToBSTR(lpszText);
но я не могу понять, как использовать его в C. Все примеры приведены для C++.

KarstenK

преобразование - это не правильное слово, потому что вы должны создать новый BSTR, как ответили ребята.

2 Ответов

Рейтинг:
1

Richard MacCutchan

То Функция SysAllocString (oleauto.h) - Win32 apps | Microsoft Docs[^] принимает указатель на строку Unicode. Так что если вы преобразуете строковую переменную через Функции multibytetowidechar (stringapiset.ч) - Win32-приложений, Майкрософт документы[^] это должно сработать.


CPallini

5.

Greg Atkinson

Очевидно, что в типе данных BSTR есть нечто большее, чем просто WideChar.

Richard MacCutchan

Я должен что-то сказать по этому поводу?

Greg Atkinson

Другими словами, функция MultiByteToWideChar не работает последовательно.

Richard MacCutchan

Для меня это всегда так. Если у вас возникли проблемы с каким-то кодом, пожалуйста, покажите нам этот код и объясните, что пошло не так. Просто говоря: "это не работает", мы ничего не говорим.

Рейтинг:
1

steveb

В C вы можете использовать

MultiByteToWideChar
Windows API