| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > DLL написанная на Delphi для Excel |
| Автор: OleGator08 15.1.2008, 07:14 | ||
| Вот статья по теме http://forum.vingrad.ru/faq/topic-156830.html про DLL для Excel, напис. на дельфях... Мне по работе надо свою физику (библиотеку вычисляемых свойств) написать людям в качестве надстройки для ехеля... Так вот, все бы ничего, считается все нормально, пользовался в том числе и описанными функциями! Но никак не могу избавится от ошибки после окончания работы с ехелевским файлом, ошибкой памяти (сразу после закрытия Excel)... Runtime error 216 at ...
Объявил в Exel как (для варианта уже, было и Double - не помогает): Public Declare Function Молек_Масса Lib "TNGGLib.dll" _ Alias "f_MM" (МассДоля_i As Variant, _ МолекМасса_i As Variant, _ Плотность20_i As Variant) As Variant |
| Автор: MetalFan 15.1.2008, 12:44 |
| ошибка в 17й строке) |
| Автор: OleGator08 15.1.2008, 13:37 | ||
если честно не понял, это была шутка или ответ... но очень расчитывал на помощь... времени катастрофически нет, а проблема висит, очень был бы благодарен за реальную помощь, без намеков а пару слов конкретно, можно примером... |
| Автор: VICTAR 15.1.2008, 13:48 | ||
|
| Автор: OleGator08 15.1.2008, 15:29 | ||||
Пожалуй я не прав... Надо запрос не в Дельфи-форум а в Форум Excel VBA делать... сорри... Попробую там... Не в коде Дельфи баг, а в том, что Excel не обработает адекватно функцию dll, написанную на D6 и после закрытия Excel выдает ошибку использования памяти... А плюнуть на нее как то не хочется... А считает эта функция в Excel правильно! =Молек_Масса(E4:E51;Фракции!B4:B51;Фракции!C4:C51) дает в ячейке 156.073 к примеру Теперь записываем книгу xls, выходим из Excel и идет ошибка эта с попыткой отправки отладки в MS... Т.е. вопрос то в том, как Excel воспринимает подсунутые DLL? Что то там не так срастается, - конфликты с DLL на дельфях писанные... |
| Автор: MetalFan 15.1.2008, 17:18 |
на какую помощь ты рассчитывал? что все кинуться повторять и отлавливать ошибку? у многих нет на это времени. хочешь увеличить вероятность оказания помощи - выложи тестовые примеры ексельного файла и проекта библиотеки. |
| Автор: OleGator08 16.1.2008, 08:25 |
| Ясно... Рассчитывал на помощь, что у кого то подобный опыт уже был... А копать мой код - это ваще неблагодарная затея... Я бы не стал, к примеру... Увы и ах... Будем искать дальше... Может у кого то где то и были подобные баги... Добавлено через 12 минут и 55 секунд И еще замечу... Ранее при работе со всеми этими функциями в проектах, где происходило вычисление данных и передача их тупо в ячейки Excel - все работало нормально... Т.е. отрабатывал exe-файл, написанный на D6, и в нем же происходила передача вычисляемых данных через OLE-механизм в нужные ячейки... Никаких ошибок при работе с динамическими массивами и своими типами дин. массивов... А вот при попытке привлечь вычисление с использованием DLL - что то Excel не понравилось... Ошибка явно использования памяти... Думаю, что наверняка были у народа подобные "грабли", кто работает с передачей данных в MS Office.... |
| Автор: MetalFan 16.1.2008, 09:06 |
| может в dll CoInitialize/CoUnitialize вызывать... ? |
| Автор: OleGator08 16.1.2008, 10:05 |
| Забавно! Причина стала понятной! Осталось только понять как устранить баг! Итак, используя утилиты и в частности tasklist /m удалось понять, что при выходе Excel тупо не успевает выгрузить за собой rtl60.bpl, которая похоже как то "не переваривается" MS... Тупо поставив задержку на событии закрытия листа в виде MsgBox("") получили выгрузку всего "паровоза", тянущегося за моей DLL... И уже нажав на "ok" Excel мирно выгрузился |
| Автор: ivan219 16.1.2008, 12:18 |
| А зачем ты вместе с пекетами Dll юзаешь? Выключи Build with runtime packages и может проблема исчезнет |
| Автор: MetalFan 16.1.2008, 12:50 |
я тебе уже посоветовал: создай пример xls файла и пример библиотеки. соотв.чтобы из екселя вызывалась какая-нибудь функция из dll выложи их здесь и кто-нибудь наверняка посмотрит ;) |
| Автор: OleGator08 21.1.2008, 08:34 | ||
Доброго времени суток! Выкладываю надстройку для Excel xla файл, dll и пример использования test_dll.xls, где на последнем листе работает пара ф-ций... Ошибка повторяется при добавке нового использования ф-ций, после выхода из Excel и т.д. Dll - лучше положить в Windows или иной каталог для умолчания... Компоновать с runtime - желательно, чтобы не тащить это все юзерам на персоналки... |