![]() |
Re: Bedingt Prozedur aufrufen
Meine mit geladen:
Delphi-Quellcode:
Aber wie funktioniert das Dyamisch? Habe das noch nicht ganz so kappiert..wie es in dem einen thread (s.o.) beschrieben ist.
procedure PortOut(Port : Word; Data : Byte);stdcall; external 'io.dll';
Evtl kann man mir jemand nen gutes beispiel machen? Thx nochmal |
Re: Bedingt Prozedur aufrufen
Zitat aus Ollis Tut:
Zitat:
|
Re: Bedingt Prozedur aufrufen
Muss mich da wohl mal reinarbeiten.. Komme damit gerade nicht klar.. Mache das zum erstenmal mit dll's. evtl kann mir ja jemand nen Beispiel auf mich zugeschnitten machen dass ich das mal sehe. weil mit dem tutorial komme ich noch nicht so zurecht. evtl hilft mir dass Beispiel dann weiter.. und ich verstehe das tutorial richtig.
Thx nochmal für die ganzen antworten schon. |
Re: Bedingt Prozedur aufrufen
Du könntest das im Prinzip so machen:
Delphi-Quellcode:
Getippt und nicht getestet.
type TPortOut = procedure(Port : Word; Data : Byte);stdcall;
... var MyPortOut: TPortOut = nil; ... var aHandle: THandle; begin if var = 1 then begin aHandle := LoadLibrary('io.dll'); if aHandle <> 0 then try @MyPortOut := GetProcAddress(aHandle,'PortOut'); if Assigned(MyPortOut) then MyPortOut(aWord,aData); finally FreeLibrary(aHandle); end; end; end; |
Re: Bedingt Prozedur aufrufen
So habe das mal probiert..geht leider nicht. Habe
Delphi-Quellcode:
bei type angeben aber er sagt: BEZEICHNER ERWARTET ABER PROCEDURE GEFUNDEN
TPortOut = procedure(Port : Word; Data : Byte);stdcall;
Wenn alles soweit läuft kann ich die Prozedur dann ganz normal aufrufen mit PORTOUT(..)? |
Re: Bedingt Prozedur aufrufen
Komisch, bei mir geht das. Und zum Ausführen schau Dir mein Beispiel noch einmal an. Ich versuche, die Adresse der Prozedur in der DLL zu finden und führe sie falls gefunden aus.
Delphi-Quellcode:
if Assigned(MyPortOut) then
MyPortOut(aWord,aData); |
Re: Bedingt Prozedur aufrufen
Zitat:
Diese sind sehr gut und eigentlich auch verständlich geschrieben. Setz Dich also hin und arbeite diese Tutorials Schritt für Schritt durch. Eventuell solltest Du auch ein kleines Testprojekt der Tutorials durcharbeiten oder selber eines anlegen. Es wird Dir hier niemand eine fertige Lösung zusammenschustern. Eigeninitiative ist gefragt. |
Re: Bedingt Prozedur aufrufen
Ja ich arbeite mich jetzt das tutorial mal durch muss da nur gucken wie ich das zeitlich halt schaffe..mache das ja nicht hauptberuflich.. :-D
aber danke an alle für die antworten |
Re: Bedingt Prozedur aufrufen
So ich habe mir das Tut usw mal angeschaut und noch nen bisschen gegoogelt und habe mal einige versuche gestartet..aber leider erfolgslos. Poste hier mal den Quelltext einer kleinen Test Unit evtl habt ihr ein paar vorschläge warum das nicht geht. Bin ja nicht so der fiteste im Programmieren. Hoffe deshalb auf weitere gute Lösungsansätze.
Delphi-Quellcode:
Hoffe habe das jetzt so halbwegs verstanden
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} type TPortOut = procedure(Port:Word;Data:Byte); stdcall; var PortOut: TPortOut; Handle: THandle; procedure TForm1.Button1Click(Sender: TObject); begin Handle := LoadLibrary(PChar(ExtractFilePath(ParamStr(0))+'io.dll')); if Handle <> 0 then begin @PortOut := GetProcAdress(Handle, 'PortOut'); if @PortOut <> nil then begin PortOut($378,255); end; FreeLibrary(Handle); end; end. Danke für antworten |
Re: Bedingt Prozedur aufrufen
So wird ein Schuh draus:
Delphi-Quellcode:
Gruß oki{$R *.dfm} type TPortOut = procedure(Port:Word;Data:Byte); stdcall; var PortOut: TPortOut = nil; AHandle: THandle = 0; implementation procedure TForm1.Button1Click(Sender: TObject); begin AHandle := LoadLibrary('io.dll'); if AHandle <> 0 then begin PortOut := GetProcAdress(AHandle, 'PortOut'); if PortOut <> nil then begin PortOut($378,255); end; FreeLibrary(AHandle); end; [edit] Handle auf AHandle [/edit oki] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz