从 C++ 自动化 Microsoft Project
Automate Microsoft Project from C++
我们正在尝试使用 C++ 代码序列读取 .MPP 文件。以下代码引发了 "access violation" 个异常,尽管它看起来应该有效。
#include "stdafx.h"
int main()
{
::CoInitialize(NULL);
_MSProjectPtr pApp;
auto hr = pApp.CreateInstance(__uuidof(Application));
variant_t toOpen = _T("d:\work\Test.mpp");
variant_t readOnly = true;
variant_t merge = false;
auto status = pApp->FileOpen(toOpen, readOnly, merge, vtMissing, vtMissing, vtMissing, vtMissing, vtMissing, vtMissing, vtMissing,
vtMissing, MSProject::pjDoNotOpenPool);
auto pProject = pApp->GetActiveProject();
auto pSummaryTask = pProject->GetProjectSummaryTask();
auto summaryStart = pSummaryTask->GetStart(); // Access violation raised by this instruction
auto pTasks = pProject->Tasks; // This call succeeds.
auto count = pTasks->Count; // Access violation raised by this instruction.
// Fails at this line with MSP 15.0.4805.1001 (in About box, 15.0.4569.1506 in Control Panel)
pApp->Quit(MSProject::PjSaveType::pjDoNotSave);
::CoUninitialize();
}
文件内容stdafx.h如下:
#pragma once
#include "targetver.h"
#include <tchar.h>
#import "C:\Program Files (x86)\Microsoft Office\Office16\MSPRJ.OLB" auto_search
using namespace MSProject;
是否缺少初始化步骤?
我也有这个问题,终于用上了
"use the Visual C++ ClassWizard to generate "wrapper 类“来自 Microsoft Office 类型库”修复它。
CMSProject app;
app.CreateDispatch(L"MSProject.Application");
auto b = app.FileNew(vtMissing, vtMissing, vtMissing, vtMissing);
app.SetVisible(TRUE);
CIProjectDoc p = (LPDISPATCH)app.GetActiveProject();
CTasks ts = p.get_Tasks();
auto n = ts.get_Count();
ts.Add((variant_t)L"abc", vtMissing);
我们正在尝试使用 C++ 代码序列读取 .MPP 文件。以下代码引发了 "access violation" 个异常,尽管它看起来应该有效。
#include "stdafx.h"
int main()
{
::CoInitialize(NULL);
_MSProjectPtr pApp;
auto hr = pApp.CreateInstance(__uuidof(Application));
variant_t toOpen = _T("d:\work\Test.mpp");
variant_t readOnly = true;
variant_t merge = false;
auto status = pApp->FileOpen(toOpen, readOnly, merge, vtMissing, vtMissing, vtMissing, vtMissing, vtMissing, vtMissing, vtMissing,
vtMissing, MSProject::pjDoNotOpenPool);
auto pProject = pApp->GetActiveProject();
auto pSummaryTask = pProject->GetProjectSummaryTask();
auto summaryStart = pSummaryTask->GetStart(); // Access violation raised by this instruction
auto pTasks = pProject->Tasks; // This call succeeds.
auto count = pTasks->Count; // Access violation raised by this instruction.
// Fails at this line with MSP 15.0.4805.1001 (in About box, 15.0.4569.1506 in Control Panel)
pApp->Quit(MSProject::PjSaveType::pjDoNotSave);
::CoUninitialize();
}
文件内容stdafx.h如下:
#pragma once
#include "targetver.h"
#include <tchar.h>
#import "C:\Program Files (x86)\Microsoft Office\Office16\MSPRJ.OLB" auto_search
using namespace MSProject;
是否缺少初始化步骤?
我也有这个问题,终于用上了 "use the Visual C++ ClassWizard to generate "wrapper 类“来自 Microsoft Office 类型库”修复它。
CMSProject app;
app.CreateDispatch(L"MSProject.Application");
auto b = app.FileNew(vtMissing, vtMissing, vtMissing, vtMissing);
app.SetVisible(TRUE);
CIProjectDoc p = (LPDISPATCH)app.GetActiveProject();
CTasks ts = p.get_Tasks();
auto n = ts.get_Count();
ts.Add((variant_t)L"abc", vtMissing);