Класс _bstr_t является ++ обертка класса C вокруг BSTR типа данных, который определяется как WCHAR *. См. Например, What's the difference between BSTR and _bstr_t?. Если вы делаете C, то ваша ссылка на _bstr_t, вероятно, неверна, и вы должны попросить конверсию в BSTR.
следующие строки кода может сделать это для вас:
DWORD len;
BSTR bstrPtr;
char sheetName[25];
/* Construct the name of your sheet as a regular string */
sprintf(sheetName, "Sheet number %d", i);
/* Count the number of bytes in the WChar version of your name
by doing a dummy conversion */
len = MultiByteToWideChar(CP_ACP, 0, sheetName, -1, 0, 0);
/* Allocate the BSTR with this size */
bstrPtr = SysAllocStringLen(0, len);
/* Do the actual conversion of the sheetName into BSTR */
MultiByteToWideChar(CP_ACP, 0, sheetName, -1, bstrPtr, len);
/* Do your stuff... */
/* Deallocate the BSTR */
SysFreeString(bstrPtr);
Если ссылка на _bstr_t является правильно и этот код не отвечает на вопрос, то пожалуйста, напишите фрагмент из файлов заголовков, вы используете, показывая определение атрибута name
. Кроме того, утверждение pSheet->Name = name
вряд ли задает имя листа Excel, поскольку обычно это связано с вызовом функции вместо простой настройки атрибута. Понимание этого потребует от вас большего контекста.
Я думаю, вы должны использовать [функции BSTR] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms221069%28v=vs.85%29.aspx) для использования BSTR ... – sarnold