![]() |
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:
// Kommentare wurden gelöscht!
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. 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 |
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:
|
Re: Fehler bei .net dll
Du versuchst dort etwas wofür .Net einfach nicht gemacht wurde.
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