Главная страница
    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.031 c
14-1088090669
QuasiLamo
2004-06-24 19:24
2004.07.11
Oracle


1-1088486764
ABL
2004-06-29 09:26
2004.07.11
Как из одного richedita передать часть текста в другой


1-1088062295
Heretic
2004-06-24 11:31
2004.07.11
Дочерние окна


1-1088202560
AndrewVolkov
2004-06-26 02:29
2004.07.11
ListView изменение ширины столбца?


4-1085520884
Германн
2004-05-26 01:34
2004.07.11
Documents and Settings





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