procedura DLL i zmiana label...w form1

0

Witam Mam procedurke DLL ktora ma zmieniac Label1.Caption... wszystko dziala ale gdy dochodzi do przypisania to wywala error ...

library SimpleDLL;

uses
  Windows,mainfrm;

procedure About; stdcall;
begin
  MessageBox(0, 'Hello World!', 'Hello', MB_OK + MB_ICONINFORMATION);
  Label1.Caption:='lol'; // MainForm.Label1.Caption:='lol';      TU WYWALA
end;

exports
  About name 'About';

begin
end.

no i wywoluje procedure about to message sie wysiwetla no i prz label ...error
na Mainform mam label1:P


dokladniej to chce zeby w tym dll byla funkcja losujaca wynik z rzutu kostka do gry.
i zapisywal go do label1.caption

POMOZECIE??

0
procedure About(Form:TForm); stdcall; //musisz podać formę
begin
  //MessageBox se sam napisz
  (Form as TMainForm).Label1.Caption:='lol';
end;
0

Niestety ale gdy wywołuje procedurę z DLL'a to znów wywala błąd... Access voilation czy jakoś tak

kod głównego programu:

unit Unit1;

interface
    
uses
  ShareMem, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
    
type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);

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

  //Deklarowanie Procedur z Biblioteki DLL
  procedure rzut_kostka; stdcall external 'Data1.dll' name 'rzut_kostka';

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  rzut_kostka;
end;

end.

i procedurki DLL

library Data1;

{%File 'Data1.bdsproj'}

uses
  ShareMem,
  SysUtils,
  Classes,
  Windows,
  unit1;

{$R *.res}   

 Procedure rzut_kostka(Form1:TForm1); stdcall;
 Begin
   (Form1 as TForm1).Label1.Caption:='lol';
 End;

 exports
  rzut_kostka name 'rzut_kostka';
begin
end.

co mam zle??
pomóżcie :) bo juz nie wiem co mam z tym zrobić... 1hzlecialo na szukaniu błędu gonieniu po google i nic z tego... :(:(

0

Oczywiście zmienić nagłówka funkcji w wywołaniu się nie da, tylko trzeba zawracać innym dupę i pie...przyć że nie działa zamiast samemu pomyśleć?

0
noroo napisał(a)

to po hu* odpisujecie??

bo nie stać cię na samodzielne myślenie. jeśli w jednym miejscu zmieniasz deklarację funkcji, to we wszystkich innych nalezy zrobić to samo. jeśli w bibliotece funkcja dostała parametr, to w unicie przy deklaracji nagłówka funkcji musisz zrobić to samo! w skrócie - skopiuj nagłówek funkcji z dll do twojego programu.
jeśli tego nie rozumiesz, to odpuść sobie na razie dllki.

0

no dziala:) dzieki chlopaki...
no nie wiedzialem a tu od razusie pluja ... mniejsza o to :P

1 użytkowników online, w tym zalogowanych: 0, gości: 1