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

Вниз

dll с отчетом выкидывается ошибка EOleSysError   Найти похожие ветки 

 
tlan   (2004-04-23 09:43) [0]

строю свою dll-ку для выводы отчета. Но как только кидаю на форму в dll-ке компонент ADOQuery, то при вызове выкидывается ошибка: EOleSysError? Без него форма открывается нормально. Если есть вариант обойти, подскажите пожалуйста.


 
tlan   (2004-04-23 09:43) [0]

строю свою dll-ку для выводы отчета. Но как только кидаю на форму в dll-ке компонент ADOQuery, то при вызове выкидывается ошибка: EOleSysError? Без него форма открывается нормально. Если есть вариант обойти, подскажите пожалуйста.


 
Гаврила   (2004-04-23 09:54) [1]

CoInitialize(Ex) вызвал ?


 
Гаврила   (2004-04-23 09:54) [1]

CoInitialize(Ex) вызвал ?


 
tlan   (2004-04-23 10:08) [2]

что-то было такое, тоже выскакивало, а что это?


 
tlan   (2004-04-23 10:08) [2]

что-то было такое, тоже выскакивало, а что это?


 
Гаврила   (2004-04-23 10:21) [3]

В DLL, в отличие от Exe, Application.Initialize по умолчанию не вызывается.
Смотрим реализацию
procedure TApplication.Initialize;
begin
 if InitProc <> nil then TProcedure(InitProc);
end;

что такое InitProc

unit System;
...
 InitProc: Pointer;        { Last installed initialization procedure }

так вот, когда в Uses подключается модуль ComObj, в его секции Initialization мы видим код

 if not IsLibrary then
 begin
   SaveInitProc := InitProc;
   InitProc := @InitComObj;
 end;

осталось выяснить ,что такое InitComObj

procedure InitComObj;
begin
 if SaveInitProc <> nil then TProcedure(SaveInitProc);
 if (CoInitFlags <> -1) and Assigned(ComObj.CoInitializeEx) then
 begin
   NeedToUninitialize := Succeeded(ComObj.CoInitializeEx(nil, CoInitFlags));
   IsMultiThread := IsMultiThread or
     ((CoInitFlags and COINIT_APARTMENTTHREADED) <> 0) or
     (CoInitFlags = COINIT_MULTITHREADED);  // this flag has value zero
 end
 else
   NeedToUninitialize := Succeeded(CoInitialize(nil));
end;

Вроде вопросов больше быть не должно ?


 
Гаврила   (2004-04-23 10:21) [3]

В DLL, в отличие от Exe, Application.Initialize по умолчанию не вызывается.
Смотрим реализацию
procedure TApplication.Initialize;
begin
 if InitProc <> nil then TProcedure(InitProc);
end;

что такое InitProc

unit System;
...
 InitProc: Pointer;        { Last installed initialization procedure }

так вот, когда в Uses подключается модуль ComObj, в его секции Initialization мы видим код

 if not IsLibrary then
 begin
   SaveInitProc := InitProc;
   InitProc := @InitComObj;
 end;

осталось выяснить ,что такое InitComObj

procedure InitComObj;
begin
 if SaveInitProc <> nil then TProcedure(SaveInitProc);
 if (CoInitFlags <> -1) and Assigned(ComObj.CoInitializeEx) then
 begin
   NeedToUninitialize := Succeeded(ComObj.CoInitializeEx(nil, CoInitFlags));
   IsMultiThread := IsMultiThread or
     ((CoInitFlags and COINIT_APARTMENTTHREADED) <> 0) or
     (CoInitFlags = COINIT_MULTITHREADED);  // this flag has value zero
 end
 else
   NeedToUninitialize := Succeeded(CoInitialize(nil));
end;

Вроде вопросов больше быть не должно ?


 
Тимохов ©   (2004-04-23 10:26) [4]


> Гаврила   (23.04.04 09:54) [1]
> CoInitialize(Ex) вызвал ?

Вроде бы просто CoInitialize(nil) достаточно. Всегда так делал.
Что такое ex?


 
Тимохов ©   (2004-04-23 10:26) [4]


> Гаврила   (23.04.04 09:54) [1]
> CoInitialize(Ex) вызвал ?

Вроде бы просто CoInitialize(nil) достаточно. Всегда так делал.
Что такое ex?


 
tlan   (2004-04-23 10:28) [5]

Большое Спасибо Гаврила, попытаюсь теперь разобраться.


 
tlan   (2004-04-23 10:28) [5]

Большое Спасибо Гаврила, попытаюсь теперь разобраться.


 
Гаврила   (2004-04-23 10:36) [6]

>>Тимохов ©   (23.04.04 10:26) [4]
Зависит от потоковой модели. В большинстве случаев достаточно разумеется CoInitialize, но иногда нужен именно CoInitializeEx

или может я ввел в заблуждение таким написанием ? Ex - имелся в виду не параметр вызова :))


 
Гаврила   (2004-04-23 10:36) [6]

>>Тимохов ©   (23.04.04 10:26) [4]
Зависит от потоковой модели. В большинстве случаев достаточно разумеется CoInitialize, но иногда нужен именно CoInitializeEx

или может я ввел в заблуждение таким написанием ? Ex - имелся в виду не параметр вызова :))


 
Тимохов ©   (2004-04-23 10:43) [7]


> Гаврила   (23.04.04 10:36) [6]

А это что-то типа фразы в дневнике "ученика(цы)"?

Да немного заблудился :))


 
Тимохов ©   (2004-04-23 10:43) [7]


> Гаврила   (23.04.04 10:36) [6]

А это что-то типа фразы в дневнике "ученика(цы)"?

Да немного заблудился :))


 
tlan   (2004-04-23 10:48) [8]

не совсем смог разобраться. А где нужно вызывать эту CoInitialize
в программе или в dll?


 
tlan   (2004-04-23 10:48) [8]

не совсем смог разобраться. А где нужно вызывать эту CoInitialize
в программе или в dll?


 
Гаврила   (2004-04-23 10:50) [9]

В DLL


 
Гаврила   (2004-04-23 10:50) [9]

В DLL


 
tlan   (2004-04-23 10:58) [10]

Undeclared indetifier: "CoInitialize"


 
tlan   (2004-04-23 10:58) [10]

Undeclared indetifier: "CoInitialize"


 
Гаврила   (2004-04-23 11:06) [11]

Uses ActiveX


 
Гаврила   (2004-04-23 11:06) [11]

Uses ActiveX


 
tlan   (2004-04-23 11:09) [12]

Ну неужели!!! Спасибо, получилось


 
tlan   (2004-04-23 11:09) [12]

Ну неужели!!! Спасибо, получилось


 
Digitman ©   (2004-04-23 11:13) [13]


> кидаю на форму в dll-ке компонент ADOQuery, то при вызове
> выкидывается ошибка: EOleSysError?


imho, ни при чем здесь CoInitialize

ошибка, связанная с отсутствием вызова CoInitialize возникает совсем в иной ситуации и по иной причине, причем в run-time

но у тебя-то - design-time ?


 
Digitman ©   (2004-04-23 11:13) [13]


> кидаю на форму в dll-ке компонент ADOQuery, то при вызове
> выкидывается ошибка: EOleSysError?


imho, ни при чем здесь CoInitialize

ошибка, связанная с отсутствием вызова CoInitialize возникает совсем в иной ситуации и по иной причине, причем в run-time

но у тебя-то - design-time ?


 
tlan   (2004-04-23 11:20) [14]

>Digitman
В  run-time, при вызове из программы


 
tlan   (2004-04-23 11:20) [14]

>Digitman
В  run-time, при вызове из программы


 
Digitman ©   (2004-04-23 11:40) [15]


> В  run-time, при вызове из программы


тогда что значит "кидаю .. на форму" ? в смысле динамически создаешь экземпляр TADOQuery с владельцем = экз-р формы в DLL ?

оч сомневаюсь, что простой вызов конструктора этого компонента может вызвать исключение по отсутствующему CoInitialize

это исключение может возникнуть лишь тогда, когда объект уже сконструирован и происходит попытка вызова одного из его методов Open или Execute в код.потоке, отличном от основного

тем более, если в ран-тайм ты получил EOleSysError, почему бы не поинтересоваться кодом исключения (св-во ErrorCode) или хотя бы не привести сюда ТОЧНОЕ сообщение об исключении ?


 
Digitman ©   (2004-04-23 11:40) [15]


> В  run-time, при вызове из программы


тогда что значит "кидаю .. на форму" ? в смысле динамически создаешь экземпляр TADOQuery с владельцем = экз-р формы в DLL ?

оч сомневаюсь, что простой вызов конструктора этого компонента может вызвать исключение по отсутствующему CoInitialize

это исключение может возникнуть лишь тогда, когда объект уже сконструирован и происходит попытка вызова одного из его методов Open или Execute в код.потоке, отличном от основного

тем более, если в ран-тайм ты получил EOleSysError, почему бы не поинтересоваться кодом исключения (св-во ErrorCode) или хотя бы не привести сюда ТОЧНОЕ сообщение об исключении ?


 
Гаврила   (2004-04-23 11:46) [16]

>>Digitman ©   (23.04.04 11:40) [15]

Скорее всего, Active выставлен в True в инспекторе, соответственно исключение получаем при создании формы


 
Гаврила   (2004-04-23 11:46) [16]

>>Digitman ©   (23.04.04 11:40) [15]

Скорее всего, Active выставлен в True в инспекторе, соответственно исключение получаем при создании формы


 
tlan   (2004-04-23 12:01) [17]

пробовал по разному: кидал на форму ADOQuery, и создавал динамически экземляр все равно была ошибка. ADOQuery ни к чему не подключал(True=false), просто компилировал библиотеку, затем вызывал ее из программы и выкидывалась ошибка. Ошибка была не в тот момент когда я кидал на форму ADOQuery, наверное я в первый раз неправильно выразился.
Долго шел до того как я нашел в чем причина, точнее в каком компоненте. Сначала думал непривильно вызываю библиотеку, затем грешил на компонент FastReport, потом уже все остальное. Ну сейчас вроде бы, с вашей помощью во всем разобрался.


 
tlan   (2004-04-23 12:01) [17]

пробовал по разному: кидал на форму ADOQuery, и создавал динамически экземляр все равно была ошибка. ADOQuery ни к чему не подключал(True=false), просто компилировал библиотеку, затем вызывал ее из программы и выкидывалась ошибка. Ошибка была не в тот момент когда я кидал на форму ADOQuery, наверное я в первый раз неправильно выразился.
Долго шел до того как я нашел в чем причина, точнее в каком компоненте. Сначала думал непривильно вызываю библиотеку, затем грешил на компонент FastReport, потом уже все остальное. Ну сейчас вроде бы, с вашей помощью во всем разобрался.


 
Гаврила   (2004-04-23 12:24) [18]

Да, покопался в коде
Оказывается, обращение к COM идет прямо в конструкторе ADOQuery, без всяких попыток открыть подключение


 
Гаврила   (2004-04-23 12:24) [18]

Да, покопался в коде
Оказывается, обращение к COM идет прямо в конструкторе ADOQuery, без всяких попыток открыть подключение


 
Digitman ©   (2004-04-23 12:40) [19]

есть и иное решение - не вызывать CoInitialize принудительно, а просто собрать и exe и dll с ран-тайм пакетами


 
Digitman ©   (2004-04-23 12:40) [19]

есть и иное решение - не вызывать CoInitialize принудительно, а просто собрать и exe и dll с ран-тайм пакетами



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

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

Наверх




Память: 0.54 MB
Время: 0.05 c
3-1081408628
balbes
2004-04-08 11:17
2004.05.09
Какую БД выбрать, чтобы данные были защищены (нужен SQL)?


14-1082447910
R
2004-04-20 11:58
2004.05.09
Просто посмеяться.


1-1082450584
Романов Р.В.
2004-04-20 12:43
2004.05.09
Организовать последовательное выполнение приложений


1-1082696065
New_Delpher
2004-04-23 08:54
2004.05.09
Подскажите ссылки на статьи как создавать мастера в Delphi.


1-1082617439
sergeii
2004-04-22 11:03
2004.05.09
Funkcija konvertirujushiaja Cifri v slova





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