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

Вниз

TCanvas, DLL - по ходу не догоняю   Найти похожие ветки 

 
MacroDenS ©   (2004-06-25 15:04) [0]

Доброго времени суток.
Уважаемые Хенделы (помниться некоторое время назад была такая фича, что всех будем звать Хенделами)
Возникла такая трабла.
У меня есль ДЛЛ, в которой есть эспор.процедура:

Procedure MyFunc(output:TCanvas);stdcall;
Begin
......
//Далее простейшая отрисовка изпользующя moveto, lineto и
//textuot
.....
end>;

exports
   MyFunc;


begin
end.


Далее в проекте загружаю ДЛЛ и вызываю функцию

.....
var
  lib:THandle;
  MyFunc:procedure (output:TCanvas);stdcall;
.....

procedure TForm1.FormCreate(Sender: TObject);
begin
 //Загружаю ДЛЛ и процедуру
  lib:=loadLibrary("paintdll.dll");
  if lib <> 0 then
     MyFunc:=GetProcAddress(lib, MyFunc")
  else begin
     showmessage("Не могу загрузить ДЛЛ");
     close;
  end;
end;

//вызов процедуры
procedure TForm1.Button1Click(Sender: TObject);
begin
  MyFunc(Image1.Canvas);
end;

//и при закрытии проекта
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  freelibrary(lib);
end;

Так вот, ДЛЛ грузится нормально, процедура работает, а вот при закрытии возникает трабла (уже после освобождения памяти под ДЛЛ, которая проходит без ошибок).
Вылазит сообщение:

Excetpion EAccessViolation in module "Project1.exe" at address <такой-то>
Access violation at <такой-то> in module "Project1.exe".
Write of address <такой-то>


Я так понял, что где-то неправильно память освобождается...
Кто-низь знает в чем прикол?
Плиз хелп.
Заранее благодарен.


 
Digitman ©   (2004-06-25 15:19) [1]


> фича.. всех будем звать Хенделами


сам ты "хендел" !


> at address <такой-то>


вот тот кто не "хендел", тот обычно воспринимает этот самый <такой-то> как важную информацию для поиска источника исключения средствами встроенного отладчика

ты, хендел, возьми-ка лупу и разгляди как следует меню "Search->find error.." и справочку при нем ... оно полезно будет .. для "хендела"


 
Григорьев Антон ©   (2004-06-25 15:25) [2]

Лучше забыть про передачу классов в dll и делать так:

procedure MyFunc(CanvHandle:THandle);
var Canvas:TCanvas;
 begin
  Canvas:=TCanvas.Create;
  Canvas.Handle:=CanvHandle;
  // Рисуем всё, что нужно
  Canvas.Handle:=0;
  Canvas.Free
 end;


 
Digitman ©   (2004-06-25 15:32) [3]


> Григорьев Антон ©   (25.06.04 15:25) [2]
> Лучше забыть про передачу классов в dll


чавой-то вдруг забыть ?

а ну как автор лепит  хост-приложения и ДЛЛ-"примочки" к ним исключительно в одной и той же версии Делфи ?

В сем случае, не вдаваясь в подробности, можно указать автору на простейшее решение - лепить все свои проекты с опцией Build With Run-Time Packages

хуже будет иной вариант  - шаровый менеджер памяти везде (во всех проектах своих) тыкать - нахрена оно нужно равно как и непонятно без поллитры после шокирующего исключения



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

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

Наверх




Память: 0.45 MB
Время: 0.034 c
1-1088102299
georg
2004-06-24 22:38
2004.07.11
1С: бухгалтерия, или вопрос немного не в тему


14-1087392519
MBo
2004-06-16 17:28
2004.07.11
Sha - поздравляю !


14-1087736047
ИМХО
2004-06-20 16:54
2004.07.11
Почему программеры любят ПИВО: моя теория


8-1082905956
iudjen
2004-04-25 19:12
2004.07.11
image OnMauuseEnter - Leave


14-1087972511
Карелин Артем
2004-06-23 10:35
2004.07.11
Где найти анализатор логов сервера формата IAS? (MicroSoft)





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