Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Prism Fehler bei .net dll (https://www.delphipraxis.net/44550-fehler-bei-net-dll.html)

Speedmaster 20. Apr 2005 18:22


Fehler bei .net dll
 
Folgenden Fehler bekam ich beim Testen eine DLL zu erstellen:
[Fehler] Library1.dpr(80): E2395 Unsichere Prozedur nur beim Compilieren mit {$UNSAFECODE ON} zulässig

Der Code ist nicht viel:
Delphi-Quellcode:
library Library1;


uses
  SysUtils,
  Classes,
  System.Reflection,
  System.Runtime.InteropServices;

[assembly: AssemblyTitle('')]
[assembly: AssemblyDescription('')]
[assembly: AssemblyConfiguration('')]
[assembly: AssemblyCompany('')]
[assembly: AssemblyProduct('')]
[assembly: AssemblyCopyright('')]
[assembly: AssemblyTrademark('')]
[assembly: AssemblyCulture('')]
[assembly: AssemblyVersion('1.0.*')]
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile('')]
[assembly: AssemblyKeyName('')]
[assembly: ComVisible(False)]


function Malnehmen(Zahl1, Zahl2: integer):int64;
begin
  Result := Zahl1 * Zahl2;
end;


exports
  Malnehmen;


begin
end.
// Kommentare wurden gelöscht!

Edit: Wie ist das eigentlich, kann man die Lib auch in Linux benutzen?

Edit2: Habe stdcall; hinter die Funktion nun gibts den Fehler:
[Fehler] Library1.dpr(74): E2297 Die Prozedurendefinition muss die ILCODE-Aufrufkonvention sein

jbg 20. Apr 2005 18:47

Re: Fehler bei .net dll
 
Borland rät davon ab eine "Library" für .NET zu erstellen. Man soll besser ein Package nehmen, da es dabei nicht zu Konflikten mit den System, SysUtils, ... Units kommt.

Im Hauptmodul sollte bei .NET nicht wirklich eigener Code stehen, da der dort enthaltene Code von anderen Assemblies nicht ganz so einfach angesprochen werden kann.

Das "exports" weißt den Delphi-Compiler an, einen Win32 DLL Einsprungpunkt für die Funktion zu generieren, was dann als unsicherer Code reklamiert wird. Wenn du die Funktion in einem anderen Assembly aufrufen willst, solltest du die Funktion in eine Unit mit passendem Namespace (Name) stecken. .NET Assemblies brauchen kein exports.

Zitat:

Wie ist das eigentlich, kann man die Lib auch in Linux benutzen?
Wenn du die Funktion in eine eigene Unit steckst (z.B. MeinName.Math.MeineUnit.pas) dann sollte das ganze auch unter Linux mit Mono / gnuDot funktionieren.

Robert_G 20. Apr 2005 18:54

Re: Fehler bei .net dll
 
Du versuchst dort etwas wofür .Net einfach nicht gemacht wurde.
  1. ) liegt da nur eine lose Funktion rum
  2. ) versuchst du diese wie bei einer alten DLL zu exportieren

Wie jbg schon sagte, musst du das ganze als unsafe deklarieren. CAS würde dabei ja eh keinen Sinn machen. :mrgreen:

Du musst aber bedenken, dass dir wohl der Marshaler die Cyclen wegfrisst. Denn das da würde ja mehr Marshaling Kosten als eigentlich Rechenkosten bedeuten. :shock:

p.s.: Ehrlich gesagt finde ich das ziemlich pervers, aber das dürftest du schon noch selbst mitkriegen. :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:56 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