Форум: "Основная";
Текущий архив: 2004.01.05;
Скачать: [xml.tar.bz2];
ВнизРисование из DLL на канве цветом Найти похожие ветки
← →
ssk (2003-12-19 09:51) [0]Всем привет! Не получается рисовать из DLL на канве цветом. Вот мой код:
Загрузка процедуры из библиотеки:
type
TWork = procedure (Cnv: TCanvas); stdcall;
var
Lib: THandle;
Work: TWork;
Lib:=LoadLibrary (PAnsiChar("ver2000i.dll"));
try
@Work:=GetProcAddress(Lib, "Work");
if not (@Work=nil) then
Work(Image.Canvas);// <--- здесь выдает ошибку при повторном вызове
finally
FreeLibrary(Lib);
end;
И DLL (лишнее убрано)
library ver2000i;
uses
ShareMem, Graphics;
procedure Work(Cnv: TCanvas); stdcall;
begin
//Cnv.Pen.Color:=clRed; { если раскомментироовать, то access violation }
Cnv.Ellipse(20, 20, 50, 80);
end;
exports
Work;
end.
Теперь вопрос: если строка о присвоении цвета закомментирована, то при последующих вызовах все работает нормально. Но если строкуCnv.Pen.Color:=clRed;
раскомментировать, то после второго вызова процедуры Work вылетает access violation (в коде я это место отметил). Как этого избежать и заставить процедуру рисовать цветом? Может я что-то не так делаю? Спасибо.
← →
REA (2003-12-19 09:56) [1]Поскольку классы в DLL и программе разные (RTTI), то могут быть разные непредсказуемые эффекты при передаче классов. А в программе тоже ShareMem первым подключен? Рекомендую линковать с подключенными RTL.
← →
ssk (2003-12-19 10:04) [2]Да, ShareMem в DPR включен первым.
← →
ssk (2003-12-19 10:06) [3]Вот начало dpr файла:
program dxf2tap;
uses
ShareMem,
Forms,
main in "main.pas" {mainForm},
tech in "tech.pas" {techForm},
← →
REA (2003-12-19 10:14) [4]@Work:=GetProcAddress(Lib, "Work"); - @ мне кажется здесь лишнее
Вместо (@Work=nil) лучше Assigned(Work).
← →
ssk (2003-12-19 10:23) [5]>REA © (19.12.03 10:14) [4]
Совет попробовал. К сожалению, не работает совсем. Ошибок нет, но ничего не рисует - отладчик до строкиWork(Im.Canvas)
не доходит. Теперь еще обнаружилось вот что: если после первого вызова с цветом попытаться закрыть приложение, то тоже вылетает access violation.
← →
REA (2003-12-19 10:26) [6]Assigned употреблять без Not. Все же включи галочку в свойствах проекта Packages->Runtime packages.
← →
ssk (2003-12-19 10:31) [7]Галочку поставил, Not убрал - все равно вылетает access violation.
← →
REA (2003-12-19 10:47) [8]Галочку и в библиотке и в exe поставил?
Давай тогда код полнее.
← →
ssk (2003-12-19 11:04) [9]В библиотеке поставил галочку и все заработало. Спасибо. А теперь вопрос такой, возможно ламерский и совсем не в тему: как узнать, какие BPL-файлы к ЕХЕ-файлу нужны? А они, подозреваю, нужны.
← →
REA (2003-12-19 11:23) [10]1) Спец утилитой, секция Imports
2) QuiсkView
3) InstallShield полный, StaticScan
4) Запустить - ругнется, на то, чего нет.
← →
ssk (2003-12-19 11:41) [11]Спасибо еще раз. Все ОК.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.01.05;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c