Может быть у кого на компе стоит Project, попробуйте. Там вроде всё прозрачно, но никак не могу понять, что же я делаю не так.
Делаю вот так. Импортирую библиотеку типов. Далее подключаю:
uses MSProject_TLB;
var
projApp: _MSProject;
projDoc: _IProjectDoc;
TaskCount: integer;
... далее в тексте программы
projApp := CoProjectApplication.Create;
projApp.Visible := true;
OpenDialog1.Filter := '????? MSProject (*.mpp)|*.mpp';
OpenDialog1.InitialDir := 'F:\MSProjects';
if OpenDialog1.Execute then
Variant(projApp).FileOpen(OpenDialog1.FileName);
projDoc := projApp.ActiveProject;
TaskCount := projDoc.Tasks.Count;
Всё запускается, открывается и т.д. совершенно нормально. В отладчике указатели ненулевые, всё отлично, но вот на последней строчке вываливается ошибка Acess Violation в OLEAUT32.DLL. Поиск в google ничего не дал. У кого какое мнение, от чего она может происходить?
Здравствуйте, Tilir, Вы писали:
T>Может быть у кого на компе стоит Project, попробуйте. Там вроде всё прозрачно, но никак не могу понять, что же я делаю не так.
[Skip]
T>Всё запускается, открывается и т.д. совершенно нормально. В отладчике указатели ненулевые, всё отлично, но вот на последней строчке вываливается ошибка Acess Violation в OLEAUT32.DLL. Поиск в google ничего не дал. У кого какое мнение, от чего она может происходить?
Попробовал, действительно падает.
Но работает если использовать позднее связывание (Dispatch). Думаю, это ваш единственный workaround
TaskCount := Variant(projDoc).Tasks.Count;
Здравствуйте, Danchik, Вы писали:
T>>Может быть у кого на компе стоит Project, попробуйте. Там вроде всё прозрачно, но никак не могу понять, что же я делаю не так.
D>[Skip]
T>>Всё запускается, открывается и т.д. совершенно нормально. В отладчике указатели ненулевые, всё отлично, но вот на последней строчке вываливается ошибка Acess Violation в OLEAUT32.DLL. Поиск в google ничего не дал. У кого какое мнение, от чего она может происходить?
D>Попробовал, действительно падает.
D>Но работает если использовать позднее связывание (Dispatch). Думаю, это ваш единственный workaround
D>D> TaskCount := Variant(projDoc).Tasks.Count;
D>
Спасибо огромное, это действительно работает!
Здравствуйте, Tilir, Вы писали:
T>Здравствуйте, Danchik, Вы писали:
T>>>Может быть у кого на компе стоит Project, попробуйте. Там вроде всё прозрачно, но никак не могу понять, что же я делаю не так.
D>>[Skip]
T>>>Всё запускается, открывается и т.д. совершенно нормально. В отладчике указатели ненулевые, всё отлично, но вот на последней строчке вываливается ошибка Acess Violation в OLEAUT32.DLL. Поиск в google ничего не дал. У кого какое мнение, от чего она может происходить?
D>>Попробовал, действительно падает.
D>>Но работает если использовать позднее связывание (Dispatch). Думаю, это ваш единственный workaround
D>>D>> TaskCount := Variant(projDoc).Tasks.Count;
D>>
T>Спасибо огромное, это действительно работает!
Скорее всего, Delphi полохо симпортировала TypeLibrary или того хуже Microsoft не апдейтнула его. А черезе Invoke все работает совсем по другому...