AGB  ·  Datenschutz  ·  Impressum  







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

Fehler beim Benutzen von DLL Procedure

Ein Thema von Lucifer · begonnen am 21. Jun 2008 · letzter Beitrag vom 21. Jun 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Lucifer
Lucifer

Registriert seit: 29. Mär 2007
62 Beiträge
 
#1

Fehler beim Benutzen von DLL Procedure

  Alt 21. Jun 2008, 13:16
Hallo.



Ich habe ein Problem wenn ich eine Procedure benutze welche ich in einer DLL eingetragen habe.
Wenn ich die Procedure in der Unit des Programms deklariere und definiere dann funktioniert alles problemlos.

Wenn ich sie aber über eine DLL benutze bekomme ich eine Fehlermeldung.

das ist die DLL

Delphi-Quellcode:
library map;

{ Important note about DLL memory management: ShareMem must be the
  first unit in your library's USES clause AND your project's (select
  Project-View Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the BORLNDMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using BORLNDMM.DLL, pass string information
  using PChar or ShortString parameters. }


uses
  SysUtils,
  Grids,
  StdCtrls,
  Classes;

{$R *.res}

procedure LoadStringGrid(StringGrid: TStringGrid; const FileName: TFileName);
var
  f: TextFile;
  iTmp, i, k: Integer;
  strTemp: String;
begin
  AssignFile(f, FileName);
  Reset(f);
  with StringGrid do
  begin
    // Get number of columns
    Readln(f, iTmp);
    ColCount := iTmp;
    // Get number of rows
    Readln(f, iTmp);
    RowCount := iTmp;
    // loop through cells & fill in values
    for i := 0 to ColCount - 1 do
      for k := 0 to RowCount - 1 do
      begin
        Readln(f, strTemp);
        Cells[i, k] := strTemp;
      end;
  end;
  CloseFile(f);
end;


exports
  LoadStringGrid;

begin

end.
und ich benutz sie so:

Delphi-Quellcode:

...

procedure LoadStringGrid(StringGrid: TStringGrid; const FileName: TFileName);
external 'map.dll'

...

LoadStringGrid(frmMapMv.sgMap, land+'.mp');
in land steht nur welche datei geladen werden muss.

Die Fehlermeldung ist
Zitat:
Invalid Pointer Operation
Im Attachment liegen Bilder zu den Errors
Miniaturansicht angehängter Grafiken
error2_150.jpg   error1_532.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von Jakob Ullmann
Jakob Ullmann

Registriert seit: 17. Feb 2007
218 Beiträge
 
Lazarus
 
#2

Re: Fehler beim Benutzen von DLL Procedure

  Alt 21. Jun 2008, 13:38
Setze mal statt

procedure LoadStringGrid(StringGrid: TStringGrid; const FileName: TFileName); ->

procedure LoadStringGrid(StringGrid: TStringGrid; const FileName: TFileName); stdcall; und

procedure LoadStringGrid(StringGrid: TStringGrid; const FileName: TFileName); external 'map.dll' ->

procedure LoadStringGrid(StringGrid: TStringGrid; const FileName: TFileName); stdcall; external 'map.dll';
Jakob
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Fehler beim Benutzen von DLL Procedure

  Alt 21. Jun 2008, 13:38
Ein Problem dürfte auch sein, dass TFileName ein String ist. Siehe dazu den Kommentar in der DLL
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Fehler beim Benutzen von DLL Procedure

  Alt 21. Jun 2008, 13:58
Ich verstehe nicht, wieso den Kommentar nie jemand liest, schließlich schreibt Borland/CodeGear/Dingsdatorero den ja nicht umsonst rein *koppschüttel*.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Fehler beim Benutzen von DLL Procedure

  Alt 21. Jun 2008, 14:00
Vielleicht wusste der TE nicht, dass TFileName im Endeffekt ein String ist.
  Mit Zitat antworten Zitat
Benutzerbild von Lucifer
Lucifer

Registriert seit: 29. Mär 2007
62 Beiträge
 
#6

Re: Fehler beim Benutzen von DLL Procedure

  Alt 21. Jun 2008, 14:04
Die erste Variante mit stdcall hatt nicht geklappt

Dann zur ShareMem:

Wenn ich sie benutze dann kann ich zwar die Dateien laden, aber es kommt dauern nach beenden des Programms
Zitat:
Runtime Error 217 at 00413CB8

Wie ich dass dann mit TFileName ändern kann weis ich nicht.
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#7

Re: Fehler beim Benutzen von DLL Procedure

  Alt 21. Jun 2008, 14:05
Verwende PChars anstatt Strings
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Fehler beim Benutzen von DLL Procedure

  Alt 21. Jun 2008, 14:07
Zitat:
To avoid using BORLNDMM.DLL, pass string information using PChar or ShortString parameters.
Das steht da oben.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Fehler beim Benutzen von DLL Procedure

  Alt 21. Jun 2008, 14:13
Hallo,

hast du denn nun ShareMem als erstes in Dll UND Programm eingebunden ?

Cells[] eines StringGrids ist ja auch vom Typ String


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#10

Re: Fehler beim Benutzen von DLL Procedure

  Alt 21. Jun 2008, 14:14
Alternativ auch Delphi-Referenz durchsuchenWideString. Damit hast du -quasi- die selbe Funktionalität wie bei strings ohne die Einschränkung mit ShareMem u.dgl.

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 03:33 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