AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Pointerfehler in DLL

Ein Thema von JocalAreaNetwork · begonnen am 22. Nov 2005 · letzter Beitrag vom 22. Nov 2005
Antwort Antwort
JocalAreaNetwork

Registriert seit: 19. Aug 2005
35 Beiträge
 
Delphi 2006 Architect
 
#1

Pointerfehler in DLL

  Alt 22. Nov 2005, 13:06
Hallo,

ich habe jetzt mehrere Stunden an einer 'Invalid Pointer Operation' gehockt und weiß einfach nicht, was hier schiefläuft.
Die Funktion, die den Fehler wirft, sieht so aus:
Delphi-Quellcode:
function UnparseExpression(expression:string;varstack:ttempstack):string; stdcall;
var
  start,len,insertid:integer;
  dummy:string;
begin
  // now reparse the stinking thing ;)
  start := Pos('$', expression);
  while ( start > 0 ) do begin
    len := start+1;
    while ( partofint(expression[len+1]) ) do
      inc(len);

    dummy := copy(expression, start+1, len-start);
    insertid := strtoint(dummy);
    delete(expression, start,len-start+1);
    dummy := 'a'; // < hier entsteht schon ein fehler, auskommentiert läuft es
    //insert(floattostr(round(varstack.Entry[insertid]*precision_number)/precision_number), expression, start);

    start := Pos('$', expression);
  end;
  result := expression;
end;
Diese Methode steht in meiner DLL, auch wenn sie nicht exportiert wird. Sie wird von einer anderen Funktion in der DLL aufgerufen. Aus mir unerklärlichen Gründen wirft Delphi nun ein 'Invalid Pointer Operation' aus nachdem die Funktion beendet ist. Kommentiere ich die Zeile dummy:='a'; aus, dann tut es das nicht. Ich kann ansonsten an anderen Stellen Strings Werte zuweisen und diese auch wieder abrufen - warum hier nicht?

Wäre super, wenn mir jemand helfen könnte.

Mit freundlichen Grüßen
JocalAreaNetwork


PS: Ich glaube es tut zwar nichts zur Sache, aber ich lade die DLL dynamisch. PartOfInt() ist eine eigene Funktion, die nichts großartiges macht außer zu überprüfen, ob der Char eine Zahl ist.
  Mit Zitat antworten Zitat
rochus

Registriert seit: 23. Dez 2004
Ort: Dornstadt
30 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Pointerfehler in DLL

  Alt 22. Nov 2005, 13:16
Hallo,
Lies dir mal den dicken Kommentarblock in deiner <DLLName>.dpr. Dort steht was von wegen "ShareMM". Damit du Daten vom Typ String (Und sei es auch nur irgendein Feld einer Klasse/Unterklasse, sonst was) mit DLLs austauschen kannst, muss der Speichermanager zwischen DLL und Hauptanwendung "geteilt" benutzt werden -> Entweder du nutzt ShareMM von Borland, dann musst du aber die brlndmm.dll mitliefern, oder du nutzt andere Lösungen wie etwa FastShareMem oder FastMM

Gruß
Nicolai Waniek
  Mit Zitat antworten Zitat
JocalAreaNetwork

Registriert seit: 19. Aug 2005
35 Beiträge
 
Delphi 2006 Architect
 
#3

Re: Pointerfehler in DLL

  Alt 22. Nov 2005, 13:25
Hi, super.

Damit wären diese Invalid Pointer Operations schon weg.

Wenn ich jedoch jetzt das Hauptprogramm beende, dann kommt ein Runtime Error 217 at 00414154. Hast du vielleicht für den noch eine Erklärung? :/


Vielen Dank schonmal.
JocalAreaNetwork

Edit: Ah, hatte ShareMem in einer Unit vergessen. Nun funktioniert alles, vielen Dank nochmal.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz