![]() |
ungültige zeigeroperation bei dll
moin zusammen,
ich versuch mich gerade an dlls und bin kurz vorm verückt werden. ich hab mir ein konstrukt aus einem tutorium gezogen was soweit funktioniert. wenn ich die anwendung aber schließe bekomm ich von delphi die meldung: "ungültige zeigeroperation" :-( die dll:
Delphi-Quellcode:
und der aufruf aus einer der units des proggs:
uses
ShareMem, SysUtils, Classes; {$R *.res} function addTextparts(tex1, tex2:string):string; register; begin result := tex1 +tex2; end; exports addTextparts;
Delphi-Quellcode:
es liegt auf jeden fall nicht an den stringop's, die hab ich auch schon versucht durch addition von zahlen zu ersetzen. hab auch schon versucht das freelibrary onclose auszuführen, hat aber auch nix gebracht...
function addTextparts(tex1, tex2:string):string;
var gesamttText :Ttextzusammen; Handle: THandle; begin Handle:=LoadLibrary(pchar(ExtractFilePath(ParamStr(0))+'textad.dll')); if Handle <> 0 then begin @gesamttText := GetProcAddress(Handle, 'addTextparts'); if @gesamttText <> nil then begin result:=gesamttText(tex1, tex2); end; FreeLibrary(Handle); end; end; danke patrik [edit=Daniel B]Delphi-Tags eingefügt. Mfg, Daniel B[/edit] |
Re: ungültige zeigeroperation bei dll
Hallo __patrik;
versuchs mal so ..
Delphi-Quellcode:
bye
function addTextparts(tex1, tex2:string):string; StdCall;
|
Re: ungültige zeigeroperation bei dll
Und hänge noch ein export; hinter das StdCall;!
Chris |
Re: ungültige zeigeroperation bei dll
hat leider nix zur linderung der schmerzen beigetragen :-(
danke patrik |
Re: ungültige zeigeroperation bei dll
Hi!
Hau' das ShareMem aus der Unit raus und trage es als erstes unter uses des Projects (*.dpr) ein. Gruß, Markus |
Re: ungültige zeigeroperation bei dll
heilung :-)
dankeschön patrik |
Re: ungültige zeigeroperation bei dll
Die Lösung mit dem "ShareMem" ist zwar korrekt,
allerdings werden damit alle Objekt Operationen extrem verlangsamt und die DLL "Borlndmm.dll" muss immer mit ausgeliefert werden. Verwende doch anstatt der "ShareMem" die Unit "FastShareMem", die Du kostenlos unter ![]() Die Handhabung dieser Unit ist identisch zur "ShareMem". Gruss aus der Schweiz, Markus :dancer: |
Re: ungültige zeigeroperation bei dll
Hi, ich hab ein änhliches Problem.
Bei mir liegts jedoch an der rückgabe , wenn ich 'result:=s' weglasse dann klappts:
Delphi-Quellcode:
und hier der aufruf :
library Project2;
uses SysUtils, Classes; {$R *.res} function func(o:TObject):string;stdcall; var s:string; c:TClass; begin c:=o.ClassType; while Assigned(c) do begin if s<>'' then s:=s+'-->'+c.ClassName else s:=c.ClassName; c:=c.ClassParent; end; result:=s; end; exports func; begin end.
Delphi-Quellcode:
Es funktioniert wunderbar, bis auf die Meldung 'Ungültige Zeigeroperation'
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls; type TForm1 = class(TForm) Button1: TButton; RichEdit1: TRichEdit; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} function func(o:TObject):String;stdcall; external 'project2.dll'; procedure TForm1.Button1Click(Sender: TObject); begin richedit1.Text:=func(button1); end; end. und das programm äuft nach der meldung auch weiter. Wenn ich die funktion ohne die dll aufrufe dann klappt auch ohne Meldung. Bitte um Hilfe MfG Moep |
Re: ungültige zeigeroperation bei dll
Hi Moep,
DaFox hat die Lösung schon geschrieben: Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:57 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