Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.03.14;
Скачать: CL | DM;

Вниз

Как из 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.007 c
3-42935
sniknik
2002-02-14 11:36
2002.03.14
Связь между базами. dbf(dBase) к (mdb) Access


4-43210
MystiX
2002-01-13 15:59
2002.03.14
Помогите!!!


14-43181
McSimm
2002-01-31 19:52
2002.03.14
Клиент для форумов. Dolphin 1.0.


4-43214
metakon
2002-01-12 03:03
2002.03.14
Как отключить клавиатуру и мышку?


3-42921
tmp_user
2002-02-14 03:50
2002.03.14
Замена редактора в DBGrid e