用于MS Project 2010的IStorage :: OpenStorage OLECHAR * pwcsName

时间:2015-07-07 06:22:24

标签: c++ c winapi

我找不到有关如何使用IStorage::OpenStorage打开MS Project 2010文件的任何文档。我不知道msproject 2010的OLECHAR *pwcsName参数应该传递什么。

以下代码打开MS Project 2007文件,但无法打开MS Project 2010文件:

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

我必须传递第一个参数才能打开MS Project 2010文件?

2 个答案:

答案 0 :(得分: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 herehere进行讨论。

答案 1 :(得分:0)

对于MS Project 2010或更高版本编写的MPP文件,我认为您需要以下内容:

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

请注意,将212更改为214。在Project 2007和Project 2010之间更改了文件格式。