Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Prism Frage zu DLLImport (https://www.delphipraxis.net/15754-frage-zu-dllimport.html)

Alexander 3. Feb 2004 17:56


Frage zu DLLImport
 
Hallo,
ich beschäftige mich mal wieder mit .NET.
Ich habe mal versucht mit .NET (also den Weg, die die anderen .NET-Sprachen auch gehen) eine Funktion aus einer DLL einzubinden.
Es handelt sich hierbei um eine DLL zur Ansteuerung des Parallel Ports (da ich keine FUntkion unter .NET gefunden habe, wahrscheinlich wegen der Plattformunabhängigkeit...).
Nun gut dazu wollte ich mir eine kleien Klasse schreiben:
Delphi-Quellcode:
  TParPort = class
  public
    function Inp32(wAddr : word) : byte;
    function Out32(wAddr : word; bOut : byte) : byte;
  end;
{...}
[DLLImport('inpout32.dll', EntryPoint = 'Inp32')]
 function TParPort.Inp32(wAddr:word) : byte; external;
[DLLImport('inpout32.dll', EntryPoint = 'Out32')]
 function TParPort.Out32(wAddr : word; bOut : byte) : byte; external;

{ Der Aufruf: }
var
 aParPort : TParPort;
begin
 aParPort := TParPort.Create;
 aParPort.Out32($378, 1);
end
Es lässt sich ohne Probleme compilen, aber dann beim Aufruf kommt eine Zugriffsverletzung.
so geht das ja ohne Probleme :
Delphi-Quellcode:
function Out32(wAddr : word; bOut : byte) : byte; external 'inpout32.dll';
Ich wollte das aber auch mit DLLImport versuchen ;-)

Was genau mache ich denn falsch?
Vielen Dank schon mal
Alexander

neolithos 3. Feb 2004 20:31

Re: Frage zu DLLImport
 
Versuch es mal indem du die zwei Fkt. als Static declarierst!

Jeden falls mach ich das so bei C#.

Alexander 4. Feb 2004 15:21

Re: Frage zu DLLImport
 
Hallo,
vielen Dank, ich werde es ausprobieren.
Allerdings murkst mein PC im Augenblick wieder rum (will nicht anspringen), kann es also gerade nicht ausprobieren (auf'm Schlepptop habe ich D8 nicht drauf.).

Alexander 4. Feb 2004 15:36

Re: Frage zu DLLImport
 
Hallo,
Wenn ich ein STATIC dahinterhänge, meckert er das STATIC nur für nicht-visuellen Klassenmethoden verwendet werden kann.
Wie funktioniert das jetzt richtig? :gruebel:

Alexander 6. Feb 2004 14:11

Re: Frage zu DLLImport
 
Hallo,
hat vielleicht irgendwer noch eine Idee?

Luckie 6. Feb 2004 14:18

Re: Frage zu DLLImport
 
Deklarier das ganze mal als stdcall.

Alexander 6. Feb 2004 15:17

Re: Frage zu DLLImport
 
Hallo,
dann haut das aber irgendwie mit EXTERNAL nicht hin, und das bruache ich wohl...
Ich hoffe, du oder irgendwer anders hat noch ne IDee :mrgreen:
Weil ich komme nicht drauf, habe eigentlich auch noch nie mit DLL's gearbeitet.

Luckie 6. Feb 2004 15:27

Re: Frage zu DLLImport
 
Warum haut das dann mit external nicht hin? Kuck dir mal die Windows.pas an, Borland macht da alle Nase lang.
Delphi-Quellcode:
function FindWindow(lpClassName, lpWindowName: PChar): HWND; stdcall;
Und im Implementation-Abschintt:
Delphi-Quellcode:
function FindWindow; external user32 name 'FindWindowA';

Alexander 6. Feb 2004 17:25

Re: Frage zu DLLImport
 
Also ich habe das jetzt so gemacht:
Delphi-Quellcode:
  TParPort = class
  public
   function Inp32(wAddr : word) : byte; stdcall;
  end;
{...}
implementation
{...}
[DLLImport('inpout32.dll', EntryPoint = 'Inp32')]
 function TParPort.Inp32(wAddr:word) : byte; external;
{...}
Und so meckert er herum, dass ein DLLImport-Attribut nicht zusammen mit einer externen oder Aufrufkonventionsdirektive verwendet werden kann :?

Also wenn das mit DLLImport unter Delphi nicht vernünftig funktioniert, mache ich das wie ich es anfangs auch gemacht habe (siehe erster Post).

Luckie 6. Feb 2004 19:50

Re: Frage zu DLLImport
 
Wie soll das bitte gehen:
Code:
function [b]TParPort.[/b]Inp32(wAddr:word) : byte; external;
Nimm das ganze mal aus der Klasse raus.

Kuck dir hier mal das DLL Tutorial an: http://www.luckie-online.de/files/exports/assarbad/


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:07 Uhr.
Seite 1 von 2  1 2      

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