![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
<B>DLL</B> не грузится, если в ней <B>TChart</B> [D7, WinXP]
vlad2 © (2009-10-21 14:12:00)Если в DLL помещаю объект типа TChart, то библиотека перестаёт грузиться, при этом GetLastError даёт 0 ("Операция успешно завершена").
Как создать TChart в DLL?
Спасибо.
vlad2 (2009-10-22 23:02:00) [21]
> Сергей М. © (22.10.09 20:18) [26]
>
> Т.е. DLL экспортирует некую ф-цию с прототипом
>
> function SomeExportedFunc(..): TChart;
Объект TChart определён, создан и используется только внутри функции. "Импортёр" функции не обязан знать, как там строится график. Таким образом, если не знаешь про TChart, то пользоваться этой длл нельзя :(.
Сергей М. (2009-10-22 20:18:00) [22]
> В результата
Т.е. DLL экспортирует некую ф-цию с прототипом
function SomeExportedFunc(..): TChart;
?
vlad2 (2009-10-22 17:50:00) [23]> Сергей М. ©
> А что, твоя DLL экспортирует функции или процедуры, в которых данные типа TChart фигурируют в параметрах или результатах ?
В результатах. Экспортируемая функция строит график и бросает его в файл.
> Зато там у тебя наверняка наверняка фигурируют vcl и rtl
Фигурируют.
> этого достаточно чтобы получить граблями при любой степени кривости или прямости тичарта
Не понял. Раньше проблем с загрузкой длл не было.
Сергей М. (2009-10-22 16:43:00) [24]
> Если в секции "Build With Run-Time Packages" проекта главного
> приложения не стоят библиотеки tee
Зато там у тебя наверняка наверняка фигурируют vcl и rtl - этого достаточно чтобы получить граблями при любой степени кривости или прямости тичарта.
Германн (2009-10-22 16:36:00) [25]
> vlad2 (22.10.09 14:28) [21]
>
> > Сергей М. © (21.10.09 19:58) [18]
>
> Если в секции "Build With Run-Time Packages" проекта главного
> приложения не стоят библиотеки tee..., то длл с ТChart'ом
> не грузится.
> В проекте длл эти же пакаджи тоже стоят.
> Наверное, всё-таки "кривость" TChart'а.
>
Да, да. Кривее не бывает. :)
Сергей М. (2009-10-22 15:40:00) [26]
> vlad2 (22.10.09 14:28) [21]
А что, твоя DLL экспортирует функции или процедуры, в которых данные типа TChart фигурируют в параметрах или результатах ?
vlad2 (2009-10-22 14:28:00) [27]> Сергей М. © (21.10.09 19:58) [18]
Если в секции "Build With Run-Time Packages" проекта главного приложения не стоят библиотеки tee..., то длл с ТChart'ом не грузится.
В проекте длл эти же пакаджи тоже стоят.
Наверное, всё-таки "кривость" TChart'а.
> Германн © (21.10.09 19:50) [17]
> Значит теперь это так называется? Подлинковать :)
Извиняйте, тёмен, батюшка :).
Германн (2009-10-22 00:42:00) [28]
> Кажись приходим к пониманию, какие грабли подстерегают
> тех, кто пытается запихать объекты VCL в динамические (DLL)
> библиотеки.
>
Не. Пока что пеняем на "кривость" TChart'а. :)
Amoeba (2009-10-22 00:04:00) [29]
> vlad2 (21.10.09 19:46) [16]
Кажись приходим к пониманию, какие грабли подстерегают тех, кто пытается запихать объекты VCL в динамические (DLL) библиотеки.
Сергей М. (2009-10-21 19:58:00) [30]
> vlad2 (21.10.09 19:46) [16]
А расскажи-ка нам, шаман, про свои прыжки с бубном вокруг крыжиков "Build With Run-Time Packages" в обоихпроектах ..
Тогда, пожалуй, станет ясно, где что нужно или не нужно, даром или не даром ..
Германн (2009-10-21 19:50:00) [31]
> навели на простую мысль подлинковать пакаджи TChart'а не
> только в длл, но и в главном приложении (где они и даром
> не были нужны).
Значит теперь это так называется? Подлинковать :)
vlad2 (2009-10-21 19:46:00) [32]Всем спасибо за участие.
Путём самозабвэнных поисков и шаманских заклинаний добился эксепшена "A class named TChartAxisTitle already exists" при загрузке длл. А на эту ошибку народ уже нарывался. Правда, в других случаях (обновление тичарта), но их манипуляции навели на простую мысль подлинковать пакаджи TChart'а не только в длл, но и в главном приложении (где они и даром не были нужны). Это нехитрое действие позволило убрать ошибку.
Сергей М. (2009-10-21 19:13:00) [33]
> vlad2 (21.10.09 17:54) [13]
По барабану правильное оно или неправильное.
LoadLibrary у тебя вернула ноль, установив при этом LastError<>0
GetUserName нишиша не вернула, но безусловно установила при этом LastError=0, благополучно похерив при этом причины ошибки, возникшей при предыдущем LoadLibrary
Следующая GetLastError, разумеется, вернула ноль.
Подозрение на то, что у тебя этотслучай, т.е. ты тем или иным макаром собственноручно поганишь LastError в ноль и потом удивляешься почему так получается)
Сергей М. (2009-10-21 18:58:00) [34]Так у тебя ж лажа в самой DLL)
vlad2 (2009-10-21 17:54:00) [35]Медвежонок Пятачок ©
> LoadLibrary('неправильная длл');
> GetUserName(....)
> GetLastError
имя правильное, GetLastError = 0
vlad2 (2009-10-21 17:47:00) [36]> Сергей М. ©
> Докладай, что ты видишь в рез-те выполнения этого
>
> hLib:=LoadLibrary(...);
> Win32Check(hLib > 0);
>
>кода ?
Вижу 'Stack overflow' :(
Медвежонок Пятачок (2009-10-21 17:08:00) [37]В этом и парадокс, что и хэндл = 0 и GetLastError = 0.
LoadLibrary('неправильная длл');
GetUserName(....)
GetLastError
Сергей М. (2009-10-21 17:07:00) [38]Так-с ..
Докладай, что ты видишь в рез-те выполнения этого
hLib:=LoadLibrary(...);
Win32Check(hLib > 0);
кода ?
vlad2 (2009-10-21 17:01:00) [39]> Тогда утверждение
> при этом GetLastError даёт 0
> ложно.
В этом и парадокс, что и хэндл = 0 и GetLastError = 0.
Сергей М. (2009-10-21 14:56:00) [40]
> вот hLib нулевой, т.е. длл не загрузилась
Тогда утверждение
> при этом GetLastError даёт 0
ложно.