C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Работа с OLE-объектами
kostya
Отправлено: 04.12.2003, 12:42


Не зарегистрирован







Есть приложение, которое работает с OLE, а именно с CorelDraw.Automation.9.
Проблема заключается в том, что программа работает, но при большом количестве вызовов OLE-функций зависает, причем в любой момент времени, т.е. выполнив какую-то часть работы (может выполнить 100, а может 1000 функций), просто останавливается. Причем зависает именно Coreldrw.exe и пока он не выполнит посланную ему функцию, моя программа останавливается.
Для примера могу привести тестовую программку, которая отражает суть вопроса:
CODE

int x = 0; // координаты
int y = 0; // текста
String s = "текст";
Variant CorelDraw = CreateOleObject("CorelDraw.Automation.9");
CorelDraw.OleFunction("FileNew"); // создание нового файла
for (int i=0; i < 100; i++){
  x = 0;
  for (int j=0; j < 100; j++){
      CorelDraw.OleFunction("CreateArtisticText", s, x, y); // рисование текста
      CorelDraw.OleFunction("SetCharacterAttributes", 0, 0, "JournalSans", 13, 50, 0, 0, 0, 0, 0, 0, 0, 2); // установка параметров текста
      x = x + 50000;
  }
  y = y + 20000;
}
CorelDraw.OleFunction("FileSave", "D:\1.cdr", 1, 0, 0, 0); // сохранение файла
CorelDraw.OleFunction("FileClose"); // закрытие файла
CorelDraw = Unassigned;

Запустил WinSight, чтобы покапаться, что собственно происходит...
дык вот, при запущенном WinSight все прекрасно работает не зависая, причем можно на компе во время выполнения работать как обычно, в том числе и в CorelDraw, подтормаживает конечно, НО не виснет...
Закрываешь WinSight — опять начинаються те же проблемы.
Как вариант конечно можно использовать, но как-то некрасиво... лучше саму прогу подправить (без API как понимаю тут не обойтись), помогите кто чем может.

Вернуться в Вопросы программирования в C++Builder