Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DLL написанная на Delphi для Excel, Ошибка при выходе из Excel 
V
    Опции темы
OleGator08
Дата 15.1.2008, 07:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 14.1.2008
Где: Тюмень

Репутация: нет
Всего: нет



 Вот статья по теме  http://forum.vingrad.ru/faq/topic-156830.html про DLL для Excel, напис. на дельфях... Мне по работе надо свою физику (библиотеку вычисляемых свойств) написать людям в качестве надстройки для ехеля... Так вот, все бы ничего, считается все нормально, пользовался в том числе и описанными  функциями! Но никак не могу избавится от ошибки после окончания работы с ехелевским файлом, ошибкой памяти (сразу после закрытия Excel)... 

Runtime error 216 at ...

Код

Вот прост. ф-я определ. молекул. массы состава... Я ее уже и Double и Variant делал! Не помогает! 
Function f_MM(const vWp_v, vMM_v, vPL20_v: Variant):Variant; stdcall;
var
   i:Integer;
   rez: Double;
begin
 RangeToVector(vWp_v, Wpi); RangeToVector(vMM_v, MM_i); RangeToVector(vPL20_v, PL20_i);
//
  rez:= Calc_MM(Wpi, MM_i, PL20_i);
  f_MM:=DoubleToVar(rez);
//
end; // f_MM(vWp_v, vMM_v, vPL20_v: Variant):Double; stdcall;

Объявил в Exel как (для варианта уже, было и Double - не помогает):
Public Declare Function Молек_Масса Lib "TNGGLib.dll" _
Alias "f_MM" (МассДоля_i As Variant, _
               МолекМасса_i As Variant, _
               Плотность20_i As Variant) As Variant
  

PM MAIL ICQ   Вверх
MetalFan
Дата 15.1.2008, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



ошибка в 17й строке)


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
OleGator08
Дата 15.1.2008, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 14.1.2008
Где: Тюмень

Репутация: нет
Всего: нет



Цитата(MetalFan @ 15.1.2008,  12:44)
ошибка в 17й строке)

если честно не понял, это была шутка или ответ... но очень расчитывал на помощь... времени катастрофически нет, а проблема висит, очень был бы благодарен за реальную помощь, без намеков а пару слов конкретно, можно примером...
PM MAIL ICQ   Вверх
VICTAR
Дата 15.1.2008, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: 37
Всего: 80



Цитата(MetalFan @  15.1.2008,  12:44 Найти цитируемый пост)
ошибка в 17й строке) 

Цитата

Ошибка в 17й строке - Ну, нет тут телепатов, нет! Нужен пример кода с которым проблемы, иначе догадаться что вы там делаете невозможно!



PM MAIL   Вверх
OleGator08
Дата 15.1.2008, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 14.1.2008
Где: Тюмень

Репутация: нет
Всего: нет



Цитата(VICTAR @ 15.1.2008,  13:48)
Цитата

Ошибка в 17й строке - Ну, нет тут телепатов, нет! Нужен пример кода с которым проблемы, иначе догадаться что вы там делаете невозможно!

Пожалуй я не прав... Надо запрос не в Дельфи-форум а в Форум Excel VBA делать... сорри... Попробую там... Не в коде Дельфи баг, а в том, что Excel не обработает адекватно функцию dll, написанную на D6 и после закрытия Excel выдает ошибку использования памяти... А плюнуть на нее как то не хочется... А считает эта функция в Excel правильно!

=Молек_Масса(E4:E51;Фракции!B4:B51;Фракции!C4:C51) дает в ячейке 156.073 к примеру

Теперь записываем книгу xls, выходим из Excel и идет ошибка эта с попыткой отправки отладки в MS... Т.е. вопрос то в том, как Excel воспринимает подсунутые DLL? Что то там не так срастается, - конфликты с DLL на дельфях писанные...
PM MAIL ICQ   Вверх
MetalFan
Дата 15.1.2008, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Цитата(OleGator08 @  15.1.2008,  13:37 Найти цитируемый пост)
если честно не понял, это была шутка или ответ...

на какую помощь ты рассчитывал? что все кинуться повторять и отлавливать ошибку?
у многих нет на это времени.
хочешь увеличить вероятность оказания помощи - выложи тестовые примеры ексельного файла и проекта библиотеки.


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
OleGator08
Дата 16.1.2008, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 14.1.2008
Где: Тюмень

Репутация: нет
Всего: нет



Ясно... Рассчитывал на помощь, что у кого то подобный опыт уже был... А копать мой код - это ваще неблагодарная затея... Я бы не стал, к примеру... Увы и ах... Будем искать дальше... Может у кого то где то и были подобные баги...

Добавлено через 12 минут и 55 секунд
И еще замечу... Ранее при работе со всеми этими функциями в проектах, где происходило вычисление данных и передача их тупо  в ячейки Excel - все работало нормально... Т.е. отрабатывал exe-файл, написанный на D6, и в нем же происходила передача вычисляемых данных через OLE-механизм в нужные ячейки... Никаких ошибок при работе с динамическими массивами и своими типами дин. массивов...  А вот при попытке привлечь вычисление с использованием DLL - что то Excel не понравилось... Ошибка явно использования памяти... Думаю, что наверняка были у народа подобные "грабли", кто работает с передачей данных в MS Office....
PM MAIL ICQ   Вверх
MetalFan
Дата 16.1.2008, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



может в dll CoInitialize/CoUnitialize вызывать...  ?


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
OleGator08
Дата 16.1.2008, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 14.1.2008
Где: Тюмень

Репутация: нет
Всего: нет



Забавно! Причина стала понятной! Осталось только понять как устранить баг! Итак, используя утилиты и в частности tasklist /m удалось понять, что при выходе Excel тупо не успевает выгрузить за собой rtl60.bpl, которая похоже как то "не переваривается" MS... Тупо поставив задержку на событии закрытия листа в виде MsgBox("") получили выгрузку всего "паровоза", тянущегося за моей DLL... И уже нажав на "ok" Excel мирно выгрузился smile ! Т.е. нужно где то предусмотреть желательную гарантированную выгрузку всего "паровоза", включенного в DLL, а она строится с пакетами rtl у меня... Ну временный выход то есть, тот же диалог при событии выхода... Но это не интересно... Может кому интересно и кто то посоветует что лучше сделать? Прилагаю протокол библиотек по команде tasklist /m ...
 

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  prot.txt 78,44 Kb
PM MAIL ICQ   Вверх
ivan219
  Дата 16.1.2008, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



А зачем ты вместе с пекетами Dll юзаешь? Выключи Build with runtime packages и может проблема исчезнет
PM MAIL ICQ   Вверх
MetalFan
Дата 16.1.2008, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Цитата(OleGator08 @  16.1.2008,  10:05 Найти цитируемый пост)
Может кому интересно и кто то посоветует что лучше сделать? 

я тебе уже посоветовал:
создай пример xls файла и пример библиотеки. соотв.чтобы из екселя вызывалась какая-нибудь функция из dll
выложи их здесь и кто-нибудь наверняка посмотрит ;)



--------------------
There are always someone smarter than you...
PM MAIL   Вверх
OleGator08
Дата 21.1.2008, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 14.1.2008
Где: Тюмень

Репутация: нет
Всего: нет



Цитата(MetalFan @ 16.1.2008,  12:50)
я тебе уже посоветовал:
создай пример xls файла и пример библиотеки. соотв.чтобы из екселя вызывалась какая-нибудь функция из dll
выложи их здесь и кто-нибудь наверняка посмотрит ;)

Доброго времени суток!
Выкладываю надстройку для Excel xla файл, dll и пример использования test_dll.xls, где на последнем листе работает пара ф-ций... Ошибка повторяется при добавке нового использования ф-ций, после выхода из Excel и т.д. Dll - лучше положить в Windows или иной каталог для умолчания...  Компоновать с runtime - желательно, чтобы не тащить это все юзерам на персоналки... 

Присоединённый файл ( Кол-во скачиваний: 10 )
Присоединённый файл  333.rar 113,28 Kb
PM MAIL ICQ   Вверх
OleGator08
Дата 22.1.2008, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 14.1.2008
Где: Тюмень

Репутация: нет
Всего: нет



Цитата(ivan219 @  16.1.2008,  12:18 Найти цитируемый пост)
А зачем ты вместе с пекетами Dll юзаешь? Выключи Build with runtime packages и может проблема исчезнет 

Нет проблема не исчезает и с компоновкой без пакетов...  Более того, вставляешь использование иных функций из dll в Лист эта долбанная ошибка вылетает даже если последовательно сохранить книгу и выходить их Excel! Как корректно освобождать этот паровоз пакетов? Может можно при закрытии организовать из dLL выгрузку пакетов принудительно? Есть такие процедуры? Или есть иные методы как бороться с этим паровозом, которого MS что то не понимает?
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0864 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.