Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

C++Builder Excel DLL

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
razin73



Зарегистрирован: 04.10.2004
Сообщения: 10

СообщениеДобавлено: Пн Окт 04 2004 20:47    Заголовок сообщения: C++Builder Excel DLL Ответить с цитатой

Остро нуждаюсь в срочной помощи! Smile)))))))

Программа вызывает из DLL форму, форма запускает поток и висит с кнопкой "Cancel", поток печатает в Excel.

Кусок кода:
try
{
app = CreateOleObject("Excel.Application");
app.OlePropertySet("Visible", 1);
books = app.OlePropertyGet("Workbooks");
books.Exec(Procedure("Open")<<"D:\\tmp\\1.xls");
book = books.OlePropertyGet("item",1);
sheet= book.OlePropertyGet("WorkSheets",1);
}
catch(...)
{
ShowMessage("Ошибка при обрашении к Excel.");
return 1;
}
return 0;
}
прекрасно работает в главной форме приложения. Работает и в потоке, если не забыть CoInitialize(NULL);
Но отказывается работать в DLL:

"Access violation at address 00f7d5cf. Read of address 00000800."

Спасибо.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Alexandr 172



Зарегистрирован: 03.09.2004
Сообщения: 66
Откуда: Челябинск

СообщениеДобавлено: Вт Окт 05 2004 08:56    Заголовок сообщения: Ответить с цитатой

По-моему ошибка не в этой части кода. В этой части ошибки ловятся.
Наверное нужно привести остальную часть кода
_________________
www.pay-ace.com/Ras254 - всем в подарок $150
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
razin73



Зарегистрирован: 04.10.2004
Сообщения: 10

СообщениеДобавлено: Вт Окт 05 2004 21:23    Заголовок сообщения: Ответить с цитатой

2 Alexandr 172
Ошибка в вызове app.OlePropertySet("Visible", 1);
Проверяется комментированием строк. Видимо app совсем не инициализируется... В руководствах есть предостережения, что в DLL это все может работать некорректно. Не могу найти как сделать правильно именно из DLL. Меня бы устроил любой вариант обращения к Excel из DLL (вызов->форма->поток).
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Mike



Зарегистрирован: 17.11.2001
Сообщения: 339
Откуда: ekb

СообщениеДобавлено: Пн Окт 18 2004 09:21    Заголовок сообщения: Ответить с цитатой

Вызовы OlePropertyGet и т.п. свои ошибки ловят и отображают сами, их трай-кэтч не поймать.
Делай лучше так:

Variant EA=Variant::CreateObject("Excel.Application");
EA.Exec(PropertySet("Visible")<<true);

ну и т.д. у меня такой вариант работает стабильно, да и ошибки легче ловить
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
razin73



Зарегистрирован: 04.10.2004
Сообщения: 10

СообщениеДобавлено: Пн Окт 25 2004 17:50    Заголовок сообщения: Ответить с цитатой

Так действительно получается.
Остается вопрос как переделать:

book = books.OlePropertyGet("item",1);
sheet= book.OlePropertyGet("WorkSheets",1);

Variant r = sheet.OlePropertyGet("Range", cell.c_str());
sheet.OlePropertyGet("Range", cell.c_str());
r.OlePropertySet("Value", as.c_str());
r.OlePropertyGet("Font").OlePropertySet("Bold", 1);
r.OlePropertyGet("Borders", i).OlePropertySet("LineStyle", 1);
r.OlePropertyGet("Borders", i).OlePropertySet("LineStyle", 7);
r.OlePropertySet("WrapText", 1);
r.OlePropertySet("VerticalAlignment", 2);
r.OlePropertySet("HorizontalAlignment", 3);
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Mike



Зарегистрирован: 17.11.2001
Сообщения: 339
Откуда: ekb

СообщениеДобавлено: Вт Окт 26 2004 08:51    Заголовок сообщения: Ответить с цитатой

book = books.Exec(PropertyGet("item")<<1);
sheet= book.Exec(PropertyGet("WorkSheets")<<1);

Variant r = sheet.Exec(PropertyGet("Range")<<cell);
sheet.Exec(PropertyGet("Range")<<cell);
r.Exec(PropertySet("Value")<<as);
r.Exec(PropertyGet("Font")).Exec(PropertySet("Bold")<<1);

ну и так далее
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
razin73



Зарегистрирован: 04.10.2004
Сообщения: 10

СообщениеДобавлено: Вт Окт 26 2004 16:51    Заголовок сообщения: Ответить с цитатой

Спасибо. У меня почему-то единички не пошли, только вот как
int i;
i = 1;
book = books.Exec(PropertyGet("item")<<i);
sheet= book.Exec(PropertyGet("WorkSheets")<<i);

sheet.Exec(PropertyGet("Range")<< cell.c_str());
Variant r = sheet.Exec(PropertyGet("Range")<< cell.c_str());
r.Exec(PropertySet("Value")<< as.c_str());
r.Exec(PropertySet("WrapText")<< iWrapText);
r.Exec(PropertySet("VerticalAlignment")<< iVerticalAlignment);
r.Exec(PropertySet("HorizontalAlignment")<< iHorizontalAlignment);

Для меня тема закрыта. Это работает и в формах и в потоках и в DLL,
если не забыть
CoInitialize(NULL);
CoUninitialize();
BC++B 6.0
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Mike



Зарегистрирован: 17.11.2001
Сообщения: 339
Откуда: ekb

СообщениеДобавлено: Ср Окт 27 2004 06:26    Заголовок сообщения: Ответить с цитатой

скорее всего 1 не пошла, потому что автоматическое преобразование неправильно сработало, наверное сработало бы int(1)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...