![]() |
EInvalidPointer nach Programmende (DLL wurde eingebunden)
leine DLL geschrieben und ein Programm, welches die DLL anspricht. Ich übergebe einen String an die DLL und ich habe überall ShareMem als erstes in die uses-Klausel mit aufgenommen. Das Programm und die DLL funktionieren soweit, doch wenn ich mein Programm dann beende, bekomme ich diese Meldung. Ich habe aber extra darauf geachtet, in meiner DLL *.Free bei allen Sachen zu setzten. Ich habe schon gehört, dass dieser Fehler auch Anderen Leuten unter kommt, aber ich finde nirgends eine Lösung. Weiß hier jemand, was da schief läuft? Zur info, ich benutze Delphi5 und habe in meiner DLL keine GUID's und keine Com oder ActivX geschichten. Selbst wenn ich sämmtliche Logig aus der DLL auskommentiere, dann bekomme ich noch den Fehler.
|
Re: EInvalidPointer nach Programmende (DLL wurde eingebunden
Statisch oder dynamisch eingebunden?
Aufrufkonventionen gesetzt? |
Re: EInvalidPointer nach Programmende (DLL wurde eingebunden
Also ich habe es statisch und dynamisch probiert, aber in beiden Fällen kommt nach Programmende die Exzeption. Was die Aufrufkonventionen angeht, da bin ich mir nicht so ganz sicher! Ich fide nirgends ein ordentliches Beispiel. Immer erklären die wie man ne Dll schreibt mit Stringübergabe und bei der implementierung nehmen die ne dll-Funktion mit nem integer, was natürlich vollkommen sinnig ist!!! bei mir sieht es so aus:
in der DLL
Delphi-Quellcode:
und jetzt das eigentliche Programm
library HelloWorld;
uses ShareMem, SysUtils, Classes, Dialogs; procedure TextOut(AMessage : string); stdcall; begin ShowMessage(AMessage); end; {$R *.RES} exports TextOut; begin end.
Delphi-Quellcode:
Wo steckt mein Denkfehler???
unit Unit1;
interface uses ShareMem, Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button_ShowHelloWorld: TButton; procedure Button_ShowHelloWorldClick(Sender: TObject); end; var Form1: TForm1; implementation procedure TextOut(AMessage : string); stdcall; external 'HelloWorld.dll'; {$R *.DFM} procedure TForm1.Button_ShowHelloWorldClick(Sender: TObject); begin TextOut('Hallo Welt'); Self.Close; end; end. |
Re: EInvalidPointer nach Programmende (DLL wurde eingebunden
Die ShareMem muss nicht in der Unit1 als erstes in der Uses Liste sein, sondern im Delphi Projekt! Also Öffne mal die Projektverwaltung (STRG-ALT-F11) und mach einen Rechtsklick auf die Projekt-EXE darin und wähle "Quelltext anzeigen". Dort füge die ShareMem als aller erste Unit in die Uses Liste. Danach das Projekt komplett neu compilieren. Die ShareMem kann aus der Unit1 raus.
|
BIG BIG THX!!!
jo, das isses!!! Das ShareMem Zeugs darf nur in die dpr und in keine pas. Toll, ich habe zich Dokus gelesen und aus keiner ging das hervor. Die meinten immer, das man ShareMem immer fleißig einbinden soll (: - Wie auch immer. Dank!
|
Re: BIG BIG THX!!!
Zitat:
|
Re: EInvalidPointer nach Programmende (DLL wurde eingebunden
|
Re: EInvalidPointer nach Programmende (DLL wurde eingebunden
Super, hat auch mir sehr weitergeholfen :)
|
Re: EInvalidPointer nach Programmende (DLL wurde eingebunden
Oder
![]() |
Re: EInvalidPointer nach Programmende (DLL wurde eingebunden
also, bei mir funktioniert das...
Delphi-Quellcode:
library Project1;
uses sharemem, SysUtils, Classes, Dialogs; {$R *.res} procedure TextOut(AMessage : string); stdcall; begin ShowMessage(AMessage); end; exports TextOut; begin end.
Delphi-Quellcode:
program Project2;
{$APPTYPE CONSOLE} uses ShareMem, SysUtils; procedure TextOut(AMessage : string); stdcall; external 'project1.dll'; begin TextOut('Hallo Welt'); end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21: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