![]() |
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:
Es lässt sich ohne Probleme compilen, aber dann beim Aufruf kommt eine Zugriffsverletzung.
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 so geht das ja ohne Probleme :
Delphi-Quellcode:
Ich wollte das aber auch mit DLLImport versuchen ;-)
function Out32(wAddr : word; bOut : byte) : byte; external 'inpout32.dll';
Was genau mache ich denn falsch? Vielen Dank schon mal Alexander |
Re: Frage zu DLLImport
Versuch es mal indem du die zwei Fkt. als Static declarierst!
Jeden falls mach ich das so bei C#. |
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.). |
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: |
Re: Frage zu DLLImport
Hallo,
hat vielleicht irgendwer noch eine Idee? |
Re: Frage zu DLLImport
Deklarier das ganze mal als stdcall.
|
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. |
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:
Und im Implementation-Abschintt:
function FindWindow(lpClassName, lpWindowName: PChar): HWND; stdcall;
Delphi-Quellcode:
function FindWindow; external user32 name 'FindWindowA';
|
Re: Frage zu DLLImport
Also ich habe das jetzt so gemacht:
Delphi-Quellcode:
Und so meckert er herum, dass ein DLLImport-Attribut nicht zusammen mit einer externen oder Aufrufkonventionsdirektive verwendet werden kann :?
TParPort = class
public function Inp32(wAddr : word) : byte; stdcall; end; {...} implementation {...} [DLLImport('inpout32.dll', EntryPoint = 'Inp32')] function TParPort.Inp32(wAddr:word) : byte; external; {...} Also wenn das mit DLLImport unter Delphi nicht vernünftig funktioniert, mache ich das wie ich es anfangs auch gemacht habe (siehe erster Post). |
Re: Frage zu DLLImport
Wie soll das bitte gehen:
Code:
Nimm das ganze mal aus der Klasse raus.
function [b]TParPort.[/b]Inp32(wAddr:word) : byte; external;
Kuck dir hier mal das DLL Tutorial an: ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:07 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