2015-07-07 2 views
0

Я не могу найти документацию о том, как открыть файлы MS Project 2010 с помощью IStorage::OpenStorage. Я не знаю, что передать для OLECHAR *pwcsName аргумента для MSProject 2010IStorage :: OpenStorage OLECHAR * pwcsName для MS Project 2010

Следующий код открывает файл MS Project 2007, но не удается открыть файл 2010 MS Project:

hr = pStorage->OpenStorage(L" 212",NULL,STGM_READ | STGM_SHARE_EXCLUSIVE, 
          NULL,0,&pAuxStorage); 

Что у меня есть передать первый параметр для открытия файла MS Project 2010?

+2

Какой код ошибки вы получаете? Это может дать ключ. –

+0

Чтобы код ошибки был переведен на понятное для человека представление, добавьте следующие часы во время отладки: 'hr, hr'. Предполагается, что вы используете отладчик Visual Studio. – IInspectable

ответ

0

L"foo" НЕ ДОПУСКАЕТСЯ перейти к функциям, ожидающим OLECHAR.

Вы должны передать строку, выделенную семейством функций SysAllocString.

Эти строки имеют специальную схему памяти и распределены с использованием распределителя COM. Хотя тип данных wchar_t в обоих случаях, использование имени OLECHAR указывает, что вызываемая функция ожидает одну из этих специальных строк. Link to related question

В C код может быть:

BSTR b = SysAllocString(L" 212"); 
hr = pStorage->OpenStorage(b, NULL, ......); 
SysFreeString(b); 

В C++ можно использовать RAII обёртку, чтобы выделить и освободить строку, хотя это не является стандартной для всех компиляторов. See here или here для обсуждения.

+0

Я не согласен, но вы говорите, что это напрямую связано с заявленной проблемой? –

+0

@JonathanPotter OP не уверен, что передать для первого параметра и показал пример, который, казалось, дал неожиданные результаты, поэтому я объяснил, как правильно передать строку первому параметру –

+0

Снова я не согласен, но с учетом того, что OP, похоже, работает над MS Project 2007, и его вопрос касается Project 2010. Мне просто интересно, действительно ли ваш ответ (хотя и фактически точный) решает вопрос. –

Смежные вопросы