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

 
ActiveX, вопрос специалистам
Лена
Отправлено: 26.11.2005, 13:14


Мастер участка

Группа: Участник
Сообщений: 501



Какие дополнительные меры, надо предпринять при компиляции релиза в проекте, который содержит ActiveX?
В моем проекте есть компонент ActiveX для картографии MapX. В режиме отладки и выполнения все работает отлично. При попытке откомпилировать, как полный релиз выдает ошибку:
[C++ Fatal Error] Main.cpp(88): F1004 Internal compiler error at 0xc56de7 with base 0xc10000

Ошибка на первой же строке, где упоминается методы MapX в главной форме:
for(int Cnt_Lyr=1; Cnt_Lyr<=Map1->Layers->Count; Cnt_Lyr++)
{
CMapXLayer * LYR = Map1->Layers->_Item(OleVariant(Cnt_Lyr));//вот здесь

Все это происходит лишь при попытке получить EXE файл как релиз, в остальном проект работает без проблем.
Спасибо.

** Лена
Отправлено: 28.11.2005, 15:05


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







Релиз удается получить, если оставить галочку в опциях компиляции Disable inline expansions. С установленной галочкой все нормально.
Будет ли такой релиз полноценным?

Guest
Отправлено: 28.11.2005, 20:42


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







1
Disable inline expansion — запрет inline-подстановки методов

2
http://www.rsdn.ru/Forum/Message/226476.htm


Только все равно ActiveX надо будет устанавливать отдельно,
на каждом компьютере, где будет работать программа,
в exe-файл он в любом случае не войдет.
(если я правильно все понимаю)
Guest
Отправлено: 28.11.2005, 20:44


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







Из вышеуказанного я имел ввиду вот это:

QUOTE
В дебаге по умолчанию Inline expansion отключен, так что все ок — создается одна функция, и соответственно единственный статический объект при первом вызове.
В релизе же ситуация такая: Singleton::Instance прекрасный кандидат для встраивания, и компилятор с радостью это встраивание производит. В результате каждый вызов (в исходном коде конечно) Singleton::Instance оборачивается созданием нового статического объекта.


У вас по-видимому ситуация аналогичная.
Лена
Отправлено: 29.11.2005, 11:32


Мастер участка

Группа: Участник
Сообщений: 501



Cрпасибо за объяснения.

>Только все равно ActiveX надо будет устанавливать отдельно,
на каждом компьютере, где будет работать программа,
в exe-файл он в любом случае не войдет.

Нет опыта в этом деле. sad.gif
ActiveX лежит на форме. Когда буду создавать инсталляционный пакет моей программы, как правильно инсталлировать ActiveX? Что программа будет состоять из двух дисков? Один родной, откуда я устанавливала сам MapX 5.0, другой с моей программой использующей этот MapX 5.0?

Gedeon
Отправлено: 29.11.2005, 12:34


Ветеран

Группа: Модератор
Сообщений: 1742



Нет, ни в коем случае, программы установки могут сами инсталировать ACTIVEX компоненты, когда я писал на бэйсике, родная от мс даже умела находить используемые в программе и включать их, поищите информацию в сети, должно быть.
Kuks
Отправлено: 29.11.2005, 12:40


Станционный диспетчер

Группа: Участник
Сообщений: 108



2 Lena

Можно ли где нибудь найти в ИНЕТЕ MapX 5.0 (ломанный)
или нет? Сам искал не нашел (только триал).
Очень интересует этот вопрос....

Спасибо!
Лена
Отправлено: 29.11.2005, 14:30


Мастер участка

Группа: Участник
Сообщений: 501



MapX можно скачать с официального сайта http://www.mapinfo.com
30 дней триал.
Остальное по почте, если надо, могу выслать.
Guest
Отправлено: 29.11.2005, 16:07


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







QUOTE
Что программа будет состоять из двух дисков


Лучше всего воспользоваться для этого инсталлятором.
Очень простой и удобный — Wise Professional 9.
Есть на дисках на комп рынках — недавно сам такой диск
себе купил — называется "Инсталляторы и паковщики."

На нем еще десяток-два разных хороших инсталляторов,
в том числе Wise 9 и Install Shield Wizard.

Делаете релиз программы, и его, и другие входящие в
проект файлы компилите этим инсталлятором
в 1 файл — например install.exe

Ну можете, конечно, еще написать — положить
отдельно install.txt или readme.txt
и записывате (если по размеру уместится) на 1 диск.

Обычно, для установки ActiveX:
"Для установки ActiveX элемента нажмите Пуск — Выполнить введите следующую команду regsvr32 "Путь к элементу *.ocx и нажмите кнопку Ок. У вас должно выйти сообщение об успешом выполнении установки ActiveX элемента."

Вроде это можно сделать как-то программно,
может ли это сделать инсталлятор — не знаю.
Guest
Отправлено: 29.11.2005, 16:21


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







http://rsdn.ru/Forum/?mid=1086199
Guest
Отправлено: 29.11.2005, 16:33


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







http://rsdn.ru/article/install/Deploying.xml
Лена
Отправлено: 29.11.2005, 17:15


Мастер участка

Группа: Участник
Сообщений: 501



Guest, большое спасибо за столь подробную и полезную для меня информацию!

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