我找不到有关如何使用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文件?
答案 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 here或here进行讨论。
答案 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之间更改了文件格式。