Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2009, 00:19   #1
Владимиp
 
Аватар для Владимиp
 
Регистрация: 29.01.2009
Сообщений: 6
Вопрос Помогите Delphi TBrush в DLL

Вызываю функцию из DLL, которая использует TBrush для вывода картинки в TPaintBox. При перерисовке TPaintBox-а выскакивает ошибка: "ExceptionViolaion in module Project2.exe at 0001B92F. Access violation at address 0041B92F in module 'Project2.exe'. Read of address 00000000."
Что-то вроде этого у меня было и с TPen, но подключение к DLL модуля Controls это исправило. А с TBrush проблема осталась.
Чайник среди чайников
Владимиp вне форума Ответить с цитированием
Старый 30.01.2009, 00:27   #2
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
По умолчанию

телепаты в отпуске, бессрочном.
код покажите, без него никак.
Alter вне форума Ответить с цитированием
Старый 30.01.2009, 00:41   #3
Владимиp
 
Аватар для Владимиp
 
Регистрация: 29.01.2009
Сообщений: 6
Вопрос

Код программы:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
procedure tp(t1:TCanvas)StdCall;
type
TForm1 = class(TForm)
Button1: TButton;
PaintBox1: TPaintBox;
procedure Button1Click(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
procedure tp;external '2.dll' name 'tp';
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
tp(PaintBox1.Canvas);
end;

end.



Код DLL:


library 2;



uses
SysUtils, Controls,
Graphics,
Classes;
procedure tp(t1:TCanvas);StdCall;
begin

t1.Brush.Color:=$808080;
t1.Pen.Color:=$000000;
t1.Rectangle(0,0,9,39);

t1.Rectangle(30,0,39,39);


end;
exports tp;
{$R *.res}

begin
end.
Чайник среди чайников

Последний раз редактировалось Владимиp; 30.01.2009 в 00:45. Причина: небольшая неточность
Владимиp вне форума Ответить с цитированием
Старый 30.01.2009, 01:09   #4
Владимиp
 
Аватар для Владимиp
 
Регистрация: 29.01.2009
Сообщений: 6
Злость

Очень нужно! ПОЖАЛУЙСТА ПОМОГИТЕ!
Чайник среди чайников
Владимиp вне форума Ответить с цитированием
Старый 30.01.2009, 14:24   #5
]Wowan[
Delphi forever
Форумчанин
 
Аватар для ]Wowan[
 
Регистрация: 13.01.2009
Сообщений: 113
По умолчанию

Во первых нет необходимости указывать дерективу Name здесь

var
Form1: TForm1;
procedure tp;external '2.dll' name 'tp';
implementation

т.к из длл эта процедура экспортируеся без указания имени
во вторых попробуй динамический импорт.
Программы на заказ Delphi, Pascal.
ася: 415 253 529. Мыло: wowan141750@gmail.com.
]Wowan[ вне форума Ответить с цитированием
Старый 30.01.2009, 15:18   #6
Владимиp
 
Аватар для Владимиp
 
Регистрация: 29.01.2009
Сообщений: 6
По умолчанию

Динамический импорт не помогает. Кто-то может еще что-нибуть предложить?
Чайник среди чайников
Владимиp вне форума Ответить с цитированием
Старый 30.01.2009, 15:20   #7
Владимиp
 
Аватар для Владимиp
 
Регистрация: 29.01.2009
Сообщений: 6
По умолчанию

Не помогло. Кто-то может еще что-нибудь предложить???
Чайник среди чайников
Владимиp вне форума Ответить с цитированием
Старый 30.01.2009, 16:04   #8
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Не передавайте в dll объект TCanvas, созданный в приложении. Можно передать handle:

Код:
procedure tp(H:HDC); stdcall; external 'Project61.dll';

procedure TForm2.Button1Click(Sender: TObject);
begin
   tp(PaintBox1.Canvas.Handle);
end;
//-----------------------------
procedure tp(H:HDC);StdCall;
var C:TCanvas;
begin
   C := TCanvas.Create;
   try
      C.Handle := H;
      C.Brush.Color:=$808080;
      C.Pen.Color:=$000000;
      C.Rectangle(0,0,9,39);
      C.Rectangle(30,0,39,39);
   finally
      C.Handle := 0;
      C.Free;
   end;
end;

exports tp;
alexBlack вне форума Ответить с цитированием
Старый 31.01.2009, 09:28   #9
Владимиp
 
Аватар для Владимиp
 
Регистрация: 29.01.2009
Сообщений: 6
Хорошо

alexBlack, ОГРОМЕННОЕ СПАСИБИЩЕ тебе!!!!
Чайник среди чайников
Владимиp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DLL в DELPHI Шульц Общие вопросы Delphi 6 11.01.2009 08:28
Создать DLL на C# и вызвать её в Delphi (Delphi) RIO Общие вопросы Delphi 2 25.03.2008 15:33
Создать DLL на C# и вызвать её в Delphi RIO Общие вопросы .NET 2 22.03.2008 22:17
Передача данных из VC++ DLL в Delphi App Kosoglaz Общие вопросы C/C++ 2 05.02.2008 10:53
Delphi + dll= Invalid Pointer Operator LEKA Общие вопросы Delphi 4 01.05.2007 23:38