Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];

Вниз

Передать FIBDatabase в COM-dll   Найти похожие ветки 

 
Sergey_Masloff   (2004-09-21 20:33) [0]

а DLL реализует немодальную форму. Никогда не надо было а тут решил поэкспериментировать.
 Вобщем, не получается. Передаю как пойнтеры ссылки на DataBase и Transaction в .dll присваиваю их динамически датасету и работаю. Ну, если датасет не открывать то все нормально. Если открывать то он записывается (естественно) в список датасетов FIBDatabase и после этого ошибка при закрытии главного приложения runtime error 216. В DLL все закрывается корректно все деструкторы отрабатывают. То есть COM объект высвобождается штатно и корректно.
 А эта гадость вылезает. Кстати с IBX аналогичный пример работает. Но надо проверить все ли там хорошо. На первый взгляд все нормально память не ест, запросы работают вобщем у кого есть какие мнения.

 Пишу специально в потрепаться - вроде и в БД не совсем и в общую не подходит.


 
Vlad ©   (2004-09-21 21:51) [1]

Была у меня подобная проблема, правда не с COM а с обычной библиотекой. Спасла компиляция с Runtime Packages
(как библиотеки  так и хост-аппликации)


 
Sergey_Masloff   (2004-09-21 22:01) [2]

Vlad ©   (21.09.04 21:51) [1]
 Володь, привет. Про Runtime знаю не подходит. Обычную dll тоже пока не очень хочется. И почему именно с FIBPlus...
 Как в ODAC кошерно сделано - специально три документированых способа работы DLL в одном коннекте с аппликацией. Все расписано.
 А тут :( Я уж и в CPU смотрел но ни фига не понятно на чем валится...


 
Vlad ©   (2004-09-21 22:20) [3]

>Sergey_Masloff   (21.09.04 22:01) [2]

Честно говоря, с FIBPlus не работал (чем кстати от IBX отличается?), но судя по твоему рассказу похоже что COM объект при своем уничножении разрушает чего-то в хост-аппликации, т.е. т.е. видимо те объекты, указатели на которые ты передал, поскольку 216 ошибка это тоже самое что EAccessViolation


 
Sergey_Masloff   (2004-09-21 22:28) [4]

Vlad ©   (21.09.04 22:20) [3]
Да особо ничем. Есть несколько фич, глобально пока отличий не вижу. Я как раз сейчас экспериментирую с ними.
 Насколько я (пока) докопался - при открытии датасета он себя прописывает в списке датасетов в датабейсе (который в главном приложении). На момент закрытия приложения и разрушения датабейса естественно ни ком-объекта ни датасета уже нет в живых но ссылка на него в датабейзе хранится. Документированых способов удалить ее я не вижу. Впрочем я пока не нашел места где с этой ссылкой делается что-то плохое при разрушении датабейза - вроде попыток обратиться к ней нет. Боюсь что это где-то в секциях финализации происходит в каком-то модуле FIBPlus-ов... Написать им чтоли - все ж лицензионный юзер.


 
Vlad ©   (2004-09-21 22:37) [5]

Почитай вот это, может частично прояснит ситуацию
http://www.delphikingdom.ru/asp/answer.asp?IDAnswer=10651
и там еще есть несколько вопросов по теме Runtime Error
Вобще, этот глюк с передачей DataSet -ов для меня загадкой остался (кстати, это было с DOA).
А в службу поддержки написать,imho, по-любому не помешает :-)


 
jack128 ©   (2004-09-21 22:51) [6]

Sergey_Masloff   (21.09.04 22:28) [4]
А разве fIbDataSet.DataBase := nil не это делает?? Очень странно..


 
Sergey_Masloff   (2004-09-21 22:56) [7]

jack128 ©   (21.09.04 22:51) [6]
Нет не это... По крайней мере когда это (:= nil) делается в DLL.
Кроме того в "лоховских" IBX ровно то же отрабатывает абсолютно нормально.


 
jack128 ©   (2004-09-21 23:23) [8]

Sergey_Masloff   (21.09.04 22:56) [7]
вот - вот. Я сейчас посмотрел код IBX

procedure TIBCustomDataSet.SetDatabase(Value: TIBDatabase);
begin
 // FIDBase: TIBBase;
 if (FBase.Database <> Value) then
 begin
   CheckDatasetClosed;
   FBase.Database := Value;
...
end;

procedure TIBBase.SetDatabase(Value: TIBDatabase);
begin
 if (FDatabase <> nil) then
   FDatabase.RemoveSQLObject(FIndexInDatabase);
...
end


Так что в Фибах глюк.  В саппорт нужно обращатся...


 
Sergey_Masloff   (2004-09-22 20:59) [9]

jack128 ©   (21.09.04 23:23) [8]
Неа, в этом месте все в порядке. Судя по тому что если собрать с runtime packages то работает -> дело в инициализациях-финализациях. Я на 99% уверен что это кэш кверей который глобальная переменная инициируемая в initialization модуля.
 Вобщем, все что я хотел чтобы работало работает, память вроде бы не течет теперь буду думать - использовать IBX и не знать горя или исп. FIBPlus и быть привязаным к линковке с RUNTIME PACKAGES чего я бы не хотел.


 
jack128 ©   (2004-09-22 22:06) [10]

Sergey_Masloff   (22.09.04 20:59) [9]
Я на 99% уверен что это кэш кверей который глобальная переменная инициируемая в initialization модуля.

На вскидку Commonib.vQueryList. но у мя тотлько демка, всех исходников нет..

но это так, мелочи.. Вот какой коментарий я нашёл в этом модуле:

{---- Please!!!! Dont write in Russian!!! Функция преобразования значения поля типа BLOB в строку ------}

function IBBlobToStr(BlobField : TFIBXSQLVAR) : string;
{---- Функция преобразования типа поля в строку ------}


:-))


 
Sergey_Masloff   (2004-09-22 22:10) [11]

jack128 ©   (22.09.04 22:06) [10]
Нет там модуль отдельный. Дома нет FIBPlus а так не помню. Что глобальная переменная там я видел но не уверен что дело в ней. В смысле не уверен на 1% ;-)



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.034 c
14-1095669902
Карелин Артем
2004-09-20 12:45
2004.10.10
Галлы vs Римляне. Было ли такое?


14-1095699462
}|{yk
2004-09-20 20:57
2004.10.10
Группа Тартак, или украинский рэп


1-1096266185
samumka
2004-09-27 10:23
2004.10.10
События в TDBGrid ?


14-1095717751
VAmpiro$
2004-09-21 02:02
2004.10.10
Что такое "Hendle" и как с ним боротся?


14-1095848482
Григорьев Антон
2004-09-22 14:21
2004.10.10
Забавная картинка из корейского метро





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский