Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Prism dll Progammieren (https://www.delphipraxis.net/130555-dll-progammieren.html)

Digielm 10. Mär 2009 15:30


dll Progammieren
 
Hallo

ich habe eine DLL programmiert mit Delphi 2006 und die wird mit .net Delphi 2007 aufgerufen.

Jetzt kriege ich immer diesen Fehler


Verwalteter Debug-Experte 'LoaderLock' trat mit der Meldung 'Eine verwaltete Ausführung wird innerhalb der Sperre für den OS-Loader versucht. Versuchen Sie nicht, verwalteten Code innerhalb einer DllMain- oder Bildinitialisierungsfunktion auszuführen, da dies ein Hängen der Anwendung zur Folge haben kann.' auf. Prozess test.exe (5412)
Verwalteter Debug-Experte 'LoaderLock' trat mit der Meldung 'Eine verwaltete Ausführung wird innerhalb der Sperre für den OS-Loader versucht. Versuchen Sie nicht, verwalteten Code innerhalb einer DllMain- oder Bildinitialisierungsfunktion auszuführen, da dies ein Hängen der Anwendung zur Folge haben kann.' auf. Prozess test.exe (5412)
Verwalteter Debug-Experte 'LoaderLock' trat mit der Meldung 'Eine verwaltete Ausführung wird innerhalb der Sperre für den OS-Loader versucht. Versuchen Sie nicht, verwalteten Code innerhalb einer DllMain- oder Bildinitialisierungsfunktion auszuführen, da dies ein Hängen der Anwendung zur Folge haben kann.' auf. Prozess test.exe (5412)

Dieses Problem kenne ich nicht, kann mir da jemand bei helfen ?

Bernhard Geyer 10. Mär 2009 15:32

Re: dll Progammieren
 
Ich würde dir vorschlagen gleich wieder auf VCL.Win32 zu wechseln. VCL.NET ist gestorben. Jeder weitere Tag Zeit zu investieren ist vergeutete Zeit.

Digielm 10. Mär 2009 15:36

Re: dll Progammieren
 
Tolle Aussage

bringt mir aber nix, da das Projekt eben schon da ist und auch erweitert werden muß !!!

Also brauche ich dennoch eine Lösung.

Bernhard Geyer 10. Mär 2009 15:40

Re: dll Progammieren
 
Zitat:

Zitat von Digielm
bringt mir aber nix, da das Projekt eben schon da ist und auch erweitert werden muß !!!

Und damit weiter in eine Sackgasse entwickelt wird ....

Googeln nach der Fehlermeldung bringt z. B. diesen Thread

Kannst du eine Minimalcode/Beispiel bringen wie die DLL eingebunden wird bzw. was die DLL macht? Du weißt schon: Glaskugel und so ...

Phoenix 10. Mär 2009 15:42

Re: dll Progammieren
 
Zitat:

Zitat von Digielm
ich habe eine DLL programmiert mit Delphi 2006 und die wird mit .net Delphi 2007 aufgerufen.

Das ist das Problem.

Aber erstmal Grundsätzlich: In .NET spricht man nicht von DLL's sondern von Assemblies. DLL asoziiert eigentlich automatisch unmanaged / native Code, deswegen würde ich in der .NET Welt immer im .NET Sprachgebrauch bleiben.

Nun zum Hintergrund:

Mit Delphi 2006 erstellst Du eine .NET 1.1 Assembly.
Delphi 2007 erzeugt aber .NET 2.0 Anwendungen.

.NET 1.1 und 2.0 sind aber dermassen Inkompatibel zueinander, dass das einfach nicht geht. Das wäre wie wenn Du eine 16bit Dll aus einem 32bit Prozess aufrufst: Das knallt vorne und hinten.

Abhilfe schafft hier, das Assembly mit Delphi 2007 auch nochmal zu erstellen, damit Du auch hier mit reinem .NET 2.0 arbeitest.

Digielm 10. Mär 2009 15:55

Re: dll Progammieren
 
Also die DLL ist eine Delphi 2006 VCL Win32 Dll.

und diese will ich eben in Delphi 2007 dot net aufrufen.

Digielm 10. Mär 2009 15:59

Re: dll Progammieren
 
Hier mal das Toll was die DLL aufruft

Delphi-Quellcode:
unit Unit1;
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Forms,
  Dialogs, Controls, StdCtrls, System.ComponentModel;

Function SetPhoneNumbersFormatted(Phonenumber, countrycodewithoutplus : String) : String; stdcall;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
 
implementation
{$R *.nfm}

Function SetPhoneNumbersFormatted(Phonenumber, countrycodewithoutplus : String) : String; stdcall;
  external 'nummer.dll';
procedure TForm1.Button1Click(Sender: TObject);
begin
  showmessage(SetPhoneNumbersFormatted('2321321321','48'));
end;

end.

Bernhard Geyer 10. Mär 2009 17:38

Re: dll Progammieren
 
Strings als übergabeparameter in eine DLL? Und das ohne SharMem und dann noch zwischen Win32 und .NET - Das kann ja eigentlich nur krachen!

Stell mal die DLL-Funktion auf PChars, besser PWideChars um. Dann könnte es besser gehen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:33 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 by Thomas Breitkreuz