![]() |
Library für dyn. Laden von DLLs in .Net
Liste der Anhänge anzeigen (Anzahl: 2)
Moin, das hier ist ein Teil einer Lib an der ich gerade arbeite.
Eigentlich sollte sie zur Laufzeit unmaged Exports ermöglichen, aber hier stellt sich der Marshaler bzw. der Jitter noch quer. Was aber bereits funktioniert ist das dyn. Laden von DLLs. Das ist wahrscheinlich gerade für Benutzer vom BDS interessant, da es erst in 2.0 die Möglichkeit gibt das überhaupt zu tun. Es it aber auch in 2.0 mit Marshal.GetDelegateFromFunctionPointer ein wenig friemelig, da man die DLL nicht mehr ohne weiteres entladen kann, bzw. alles zu Fuss machen muss. Mit der Lib kann man sich also
Zur Demo mal 2 ähnliche Delphi libs, die sich nur im Rückgabewert unterscheiden:
Delphi-Quellcode:
library NativeLib1;
function Add(left, right : Integer) : Integer; stdcall; begin result := left + right; end; function SayHello : PChar; begin Result := 'Hello'; end; exports Add, SayHello; end.
Delphi-Quellcode:
Der Demo code selbst sollte leicht verständlich sein:
library NativeLib2;
function Add(left, right : Integer) : Integer; stdcall; begin result := (left + right) * 1000; end; function SayHello : PChar; begin Result := 'Hallo du da'; end; exports Add, SayHello; end.
Delphi-Quellcode:
AddFunction = function(left, right : Integer) : Integer;
HelloFunction = function : String; implementation class procedure ConsoleApp.Main; begin using lib := Library.Load('NativeLib1') do begin var add := lib.WrapFunction('Add', typeof(AddFunction)) as AddFunction; var hello := lib.WrapFunction('SayHello', typeof(HelloFunction)) as HelloFunction; Console.WriteLine('{0,8}: {1,3} & {2,3} = {3,5}', ['Add', 3, 4, add(3, 4)]); Console.WriteLine('SayHello: {0}', hello()); lib.Reload('NativeLib2'); Console.WriteLine('{0,8}: {1,3} & {2,3} = {3,5}', ['Add', 3, 4, add(3, 4)]); Console.WriteLine('SayHello: {0}', hello()); end; end;
Code:
Scheint zu klappen :stupid: ( :zwinker: )
.
Add: 3 & 4 = 7 SayHello: Hello Add: 3 & 4 = 7000 SayHello: Hallo du da Have phun! Edit: Der Beitragseditor zickt ein wenig bei gleichnamigen Anhängen... :freak: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:10 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