Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

<B>DLL</B> не грузится, если в ней <B>TChart</B> [D7, WinXP]


Страницы:   1 2 3

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


ложно.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо