Автоматизация MSProject - проблемы
От: Tilir Россия http://tilir.livejournal.com
Дата: 30.08.06 13:27
Оценка:
Может быть у кого на компе стоит 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 ничего не дал. У кого какое мнение, от чего она может происходить?
Re: Автоматизация MSProject - проблемы
От: Аноним  
Дата: 30.08.06 13:31
Оценка:
T>Всё запускается, открывается и т.д. совершенно нормально. В отладчике указатели ненулевые, всё отлично

projDoc.Tasks. тоже ненулевой ?
Re: Автоматизация MSProject - проблемы
От: Danchik Украина  
Дата: 30.08.06 13:58
Оценка:
Здравствуйте, Tilir, Вы писали:

T>Может быть у кого на компе стоит Project, попробуйте. Там вроде всё прозрачно, но никак не могу понять, что же я делаю не так.


[Skip]

T>Всё запускается, открывается и т.д. совершенно нормально. В отладчике указатели ненулевые, всё отлично, но вот на последней строчке вываливается ошибка Acess Violation в OLEAUT32.DLL. Поиск в google ничего не дал. У кого какое мнение, от чего она может происходить?


Попробовал, действительно падает.
Но работает если использовать позднее связывание (Dispatch). Думаю, это ваш единственный workaround
  TaskCount := Variant(projDoc).Tasks.Count;
Re[2]: Автоматизация MSProject - проблемы
От: Tilir Россия http://tilir.livejournal.com
Дата: 31.08.06 05:17
Оценка:
Здравствуйте, Danchik, Вы писали:

T>>Может быть у кого на компе стоит Project, попробуйте. Там вроде всё прозрачно, но никак не могу понять, что же я делаю не так.


D>[Skip]


T>>Всё запускается, открывается и т.д. совершенно нормально. В отладчике указатели ненулевые, всё отлично, но вот на последней строчке вываливается ошибка Acess Violation в OLEAUT32.DLL. Поиск в google ничего не дал. У кого какое мнение, от чего она может происходить?


D>Попробовал, действительно падает.

D>Но работает если использовать позднее связывание (Dispatch). Думаю, это ваш единственный workaround
D>
D>  TaskCount := Variant(projDoc).Tasks.Count;
D>


Спасибо огромное, это действительно работает!
Re[3]: Автоматизация MSProject - проблемы
От: Danchik Украина  
Дата: 31.08.06 10:56
Оценка:
Здравствуйте, 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 все работает совсем по другому...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.