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

Вниз

Как из DLL использовать OracleSession вызывающей программы?   Найти похожие ветки 

 
Максимка   (2002-02-10 20:17) [0]

Имеется DLL, в ней модуль данных, в модуле данных всякие OracleDataSet, OracleQuery (используется DOA). Надо, чтобы они были подключены к сессии, находящейся в той программе, которая эту ДЛЛ вызывает. При создании модуля данных ему из вызывающей программы передаётся в качестве параметра указатель (pointer) на эту самую сессию. И при всяком обращении к компонентам DOA выскакивает ощибка Аccess violation. Видимо, что-то не в порядке с выделением памяти под сессию. В общем, если кто-нибудь это всё понял, то большая просьба о помощи.


 
Johnny Smith   (2002-02-11 10:14) [1]

Такие неприятности порой случаются. Проверь, как у тебя дела с Create"ом этих самых OracleDataSet, OracleQuery, а вообще, почему бы тебе не отдебажить dll-ку? Все и узнаешь... А так мало ли где у тебя все срывается...


 
EternalWonderer   (2002-02-11 11:43) [2]

А какова очерёдность создания: используется неявная загрузка dll?


 
petr_v_a   (2002-02-11 14:43) [3]

обязательно использовать sharemem


 
Максимка   (2002-02-11 20:48) [4]

>>как у тебя дела с Create"ом этих самых OracleDataSet, OracleQuery
Они специально не создаются. Просто делаю DataModule1:=TDataModule.Create(application);
OracleDataSet1.Session:=p;
(ну, а в р в вызывающей проге положен пойнтер на сессию)
Или так нельзя? Может, надо отдельно каждому элементу свой Create?
Отдебажить - никак не могу, ни фига не могу отловить ошибку конкретно, но в общем она появляется при каждом обращении к элементам, использующим сессию.

Загрузка DLL - явная.
Имеется вызывающая форма, в ней сессия. По кнопке загружается ДЛЛ, запускаются находящиеся в ДЛЛ процедуры - 1 создаёт главную форму ДЛЛ, 2 создаёт модуль данных.

ShareMem я прописал везде первым - никаких изменений не произошло.


 
Johnny Smith   (2002-02-12 10:43) [5]

Access Violation выскакивает тогда, когда прога пытается обратиться к участку памяти, которого на самом деле не существует (он равен nil). На этот счет была как-то по осени оч-чень замечательная статья в "Программисте".
Вот и у тебя где-то что-то равно nil. Сам понимаешь, отыскать это можно только с помощью дебаггера...
Удачи.



 
Vadim   (2002-02-12 16:15) [6]

Р и в программе и в dll объявлен как TSession?


 
Максимка   (2002-02-12 18:57) [7]

Нет, р имеет тип pointer, объявлен в вызывающей программе. А в ДЛЛ просто написано: DataModule1.OracleDataSet1.Session:=p


 
Vadim   (2002-02-14 10:56) [8]

Так попробуй объявить p как TSession и там и там.



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

Форум: "Базы";
Текущий архив: 2002.03.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.005 c
1-43096
Katerina
2002-02-28 05:01
2002.03.14
<B>Подскажите пожалуйста</B>


7-43187
Kostya Luzan
2001-12-08 03:59
2002.03.14
Эмулировать СОМ


1-43075
Aleksgt
2002-02-24 21:25
2002.03.14
операторы


3-42963
Ulikoff
2002-02-15 10:48
2002.03.14
Настройка БД по сети


1-43057
Gayrus
2002-02-26 16:12
2002.03.14
PageControl





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский