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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.07.2014, 17:34   #1
Armageddets
Форумчанин
 
Регистрация: 30.06.2012
Сообщений: 145
По умолчанию неправильно берутся данные из Dll

Доброго времени суток, уважаемые эксперты. Я создал длл в делфи такго вида:
Код:
library SetkaDll;


uses
  Windows,SysUtils,
  Classes,Graphics;

procedure Setka(RazmerCell,RazmerX,RazmerY,MX,MY,Tolshina:integer; SetkaColor:TColor; Buf:TBitmap); stdcall;
var i:integer;
begin

 Buf.Canvas.Pen.Color:=SetkaColor;
 Buf.Canvas.Pen.Width:=Tolshina;

 for i:=0 to RazmerY-1 do
 begin
 Buf.Canvas.MoveTo(0-MX,i*RazmerCell-MY);
 Buf.Canvas.LineTo(RazmerX*RazmerCell-MX,i*RazmerCell-MY);
 end;

 for i:=0 to RazmerX-1 do
 begin
 Buf.Canvas.MoveTo(i*RazmerCell-MX,0-MY);
 Buf.Canvas.LineTo(i*RazmerCell-MX,RazmerY*RazmerCell-MY);
 end;

end;

exports
  Setka;


begin
end.
Затем сбросил длл в папку с программой. и Подключил процедуру в проект. Но при запуске этой проыедуры появляется сообщение вида EAcces Violation Adress. Я подозреваю что берутся не те данные, которые должны. Скажите что я делаю не так? Вот кож самого проекта:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Buf:TBitmap;

implementation
procedure Setka(RazmerCell,RazmerX,RazmerY,MX,MY,Tolshina:integer; SetkaColor:TColor; Buf:TBitmap); stdcall; external 'SetkaDll.dll';
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(StrPas(MyBoolToStr(False)));
end;

procedure TForm1.Button2Click(Sender: TObject);
var RazmerCell,RazmerX,RazmerY,MX,MY,Tolshina:integer; SetkaColor:TColor;
begin
  Buf:=TBitmap.Create;
  Buf.Width:=1000;
  Buf.Height:=1000;

  RazmerCell:=32;
  RazmerX:=10;
  MX:=0;
  Tolshina:=1;
  SetkaColor:=clred;
  Setka(RazmerCell,RazmerX,RazmerX,MX,MX,Tolshina,SetkaColor,Buf);

  form1.Canvas.Draw(0,0,buf);
end;

end.
Заранее благодарен всем за советы...

From Stilet: В следующий раз код оформляй по правилам форума.

Последний раз редактировалось Stilet; 29.07.2014 в 18:10.
Armageddets вне форума Ответить с цитированием
Старый 29.07.2014, 17:49   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Оформите код соответствующим тегом.
Человек_Борща вне форума Ответить с цитированием
Старый 29.07.2014, 22:03   #3
Armageddets
Форумчанин
 
Регистрация: 30.06.2012
Сообщений: 145
По умолчанию

Чтобы не напрягать я лучше скину сразу и длл и проект. Я подозреваю что код надо между тегами <CODE>?
Вложения
Тип файла: rar Новая папка.rar (314.6 Кб, 6 просмотров)
Armageddets вне форума Ответить с цитированием
Старый 29.07.2014, 22:04   #4
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Ошибка доступа к данным по адресу, вот что выдает. Это значит, что либо адрес уже занят(находится в обработке), либо его нет!
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 30.07.2014, 02:23   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Что-то мне подсказывает что нельзя просто так взять и передать TBitMap как класс. Максимум это HBITMAP. DLL его создает, а вы уже отвечаете ха жизнь этого HBITMAP'а в последующем.
Человек_Борща вне форума Ответить с цитированием
Старый 30.07.2014, 08:07   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
нельзя просто так взять и передать TBitMap как класс
Почему нельзя? Я классы в ДЛЛ передавал и ничего... Работало.
Вот если бы автор прошелся по проекту отладкой...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Данные полученные от DLL (кто очищает) xper13 Общие вопросы Delphi 7 11.02.2014 14:32
Вернуть данные из DLL CeHTuJI Общие вопросы Delphi 7 07.02.2014 22:23
В Access 2010 в отчете неправильно выводятся данные proavg Microsoft Office Access 4 07.01.2012 09:29
Неправильно воспринимаются POST данные Руслантус PHP 4 04.01.2011 13:13
не берутся данные из access в builder tatysya Помощь студентам 6 04.08.2010 12:02