![]() |
Re: Bedingt Prozedur aufrufen
Und das FreeLibrary noch eine Zeile höher vor das end ;)
|
Re: Bedingt Prozedur aufrufen
Upps,
klar, sorry! Gruß oki |
Re: Bedingt Prozedur aufrufen
Zitat:
Die Frage ist eher: Was klappt nicht? Passiert einfach nichts? Da ist dann die Frage: kann er die DLL nicht laden oder den Export in der DLL nicht finden?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin AHandle := LoadLibrary('io.dll'); if AHandle <> 0 then begin @PortOut := GetProcAdress(AHandle, 'PortOut'); if assigned(PortOut) then begin PortOut($378,255); end else ShowMessage('Funktion in der DLL nicht gefunden!'); FreeLibrary(AHandle); end else ShowMessage('DLL nicht gefunden!'); end; |
Re: Bedingt Prozedur aufrufen
Hi Muetze1,
ich hab mich durch die miese Formatierung etwas durcheinander bringen lassen. Der Compiler sollte aber eher wegen der fehlenden End's meckern. so sollte es aber doch richtig sein ... oder bin ich jetzt blind :gruebel:
Delphi-Quellcode:
Gruß oki
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 PortOut($378,255); FreeLibrary(AHandle); end; end; [edit] ich formatiere mich hier noch um Kopf und Kragen [/edit] |
Re: Bedingt Prozedur aufrufen
Zitat:
Deshalb muss man die Adresse zuweisen beim GetProcAdress(), also mit dem @ davor. Bei der If Abfrage will man schliesslich auch nicht den Rückgabewert der Procedure mit Nil vergleichen sondern die abgelegte Adresse der Funktion. Von daher auch dort ein @ davor - oder - mit Assigned() prüfen. |
Re: Bedingt Prozedur aufrufen
Hi,
Das mit dem assigned verwende ich bei mir eigentlich auch immer. Hab an dieser Stelle aus dem Thread kopiert und mir nichts dabei gedacht, da das nil in der globalen Variablenzuweisung auch nicht angemeckert wird. Somit geb ich dir ungeprüft recht. Bei der Zuweisung der Proceduradresse klappt das aber definitiv ohne @ !!! Hab ich vorherige Woche grad mit einer dynamischen DLL-Einbindung gemacht. Ist getestet. Entweder es geht wirklich auch grundsätzlich so, oder mein D2007 hilft im Hintergrund nach. Gruß oki |
Re: Bedingt Prozedur aufrufen
Ok, das mit dem GetProcAddress() kann ich nachvollziehen, das meckert er mir beim BDS2006 auch nicht mehr an. Die If Anweisung jedoch wird als Aufruf betrachtet. Das ist mir neu, ich teste gleich nochmal die älteren Versionen.
Ok, bis runter zu D5 klappt die GetProcAddress() Zuweisung ohne das @. Somit stimmt meine Aussage mit dem @ bei dem Teil nicht, es ist optional. Wieder was gelernt - aber was soll's, ich hab' ja keine Ahnung... |
Re: Bedingt Prozedur aufrufen
Zitat:
- aber was soll's, ich hab' ja keine Ahnung... :mrgreen: [heimliches Zitat] gruß oki |
Re: Bedingt Prozedur aufrufen
So irgendwie ghets immer noch nicht... irgendwie bin ich zu doof für die gnaze aktion oder es ist wirlioch noch irgendwo nen fehler drin. So muss es doch gehen aber warum sagt er mir bei GetProcAdress das es ein undefinierter Bezeichner ist? also mir fällt da jetzt garnichts mehr ein..habe davon die anse bald voll :twisted: das muss doch irgendwie gehen.
Delphi-Quellcode:
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; type TPortOut = procedure(Port:Word;Data:Byte); stdcall; var PortOut: TPortOut = nil; AHandle: THandle = 0; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin begin AHandle := LoadLibrary('io.dll'); if AHandle <> 0 then begin PortOut := GetProcAdress(AHandle, 'PortOut'); if PortOut <> nil then PortOut($378,255); end; FreeLibrary(AHandle); end; end; end. |
Re: Bedingt Prozedur aufrufen
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:17 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