AGB  ·  Datenschutz  ·  Impressum  







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

Problem mit DLL / Übergabe

Ein Thema von Infamous · begonnen am 9. Okt 2008 · letzter Beitrag vom 21. Okt 2008
Antwort Antwort
Seite 1 von 2  1 2      
Infamous

Registriert seit: 27. Nov 2007
16 Beiträge
 
#1

Problem mit DLL / Übergabe

  Alt 9. Okt 2008, 15:26
Hi!

Also, ich habe eine DLL geschrieben, in der unter anderem in einer Prozedur eine StringList verarbeitet wird und wieder zurückgegeben werden soll (var). Um die DLL aufzurufen, habe ich eine extra Unit, in der die DLL immer aufgerufen wird (mit mehreren Funktionen und Prozeduren). Im Hauptprogramm rufe ich dann die Schnittstelle auf, übergebe dabei einen Parameter StringList. In der schnittstelle ist dieser Parameter als "var" deklariert. Wenn die StringList dann verarbeitet wurde von der DLL und ich wieder im Hauptprogramm bin, bekomme ich aber immer eine Zugriffsverletzung. Hab es auch schon mit Strings versucht, klappt auch nicht. Vorher hatte ich einen extra Type, wobei es da auch nicht anders war mit der Zugriffsverletzung.

Hab in Google geguckt und gesehen dass viele so einen Fehler hatten. Aber hab nirgends eine brauchbare Lösung gefunden.


Scheint so, als wäre die zurück gegebene StringList immer leer. Liegt es am "var"?
Wie muss ich das machen??

Danke schonmal...
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#2

Re: Problem mit DLL / Übergabe

  Alt 9. Okt 2008, 15:49
Wenn Du über den Experten das Gerüst einer DLL erstellen lässt, schreibt Delphi da einen ziemlich langen Kommentar rein. Den sollte man vielleicht auch mal lesen.
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 sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Problem mit DLL / Übergabe

  Alt 9. Okt 2008, 15:52
Entweder du benutzt einen anderen Speichermanager oder du versuchst es mal mit IStrings.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Infamous

Registriert seit: 27. Nov 2007
16 Beiträge
 
#4

Re: Problem mit DLL / Übergabe

  Alt 9. Okt 2008, 15:57
Zitat von DeddyH:
Wenn Du über den Experten das Gerüst einer DLL erstellen lässt, schreibt Delphi da einen ziemlich langen Kommentar rein. Den sollte man vielleicht auch mal lesen.
Mit einem String würde es dann klappen, mit einer StringList trotzdem nicht.

Zitat:
Entweder du benutzt einen anderen Speichermanager oder du versuchst es mal mit IStrings.
Wie würde ich einen anderen Speichermanager benutzen!? Ich guck mir mal den Link an.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Problem mit DLL / Übergabe

  Alt 9. Okt 2008, 16:17
Zitat von Infamous:
Wie würde ich einen anderen Speichermanager benutzen!?
Möglichkeit 1: "Sharemem" ist das, was in der DLL steht, und was Deddy gemeint hat. Das ist der SM von Borland.
Möglichkeit 2: Einen fremden Speichermanager nehmen (fastmemorymanager)


Edit:
IStrings wäre die bessere Methode. Denn die unterstreicht den Sinn einer DLL. Dadurch wird deine DLL unabhängig von der Entwicklungsumgebung / PS in der sie programmiert wurde.

Mit den Speichermanagern bindest du dich an Delphi. Genauer gesagt, du bindest dich an ein Projekt. Denn du musst ja immer denselben Speichermanager verwenden. Dieses Konzept konterkariert ein wenig den Sinn einer DLL.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Mr_G
Mr_G

Registriert seit: 2. Sep 2004
Ort: Duisburg
468 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Problem mit DLL / Übergabe

  Alt 9. Okt 2008, 17:09
Wenn es nur um die Daten der StringList geht könntest du afaik auch auf die Eigenschaft Text zurückgreifen. Die liefert den Inhalt als String und denn könntest du dann als PChar in die DLL geben und verarbeiten.
Jan
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Problem mit DLL / Übergabe

  Alt 9. Okt 2008, 17:30
Mit IStrings geht das viel einfacher/schöner:

Delphi-Quellcode:
uses StdVCL, AxCtrls;

var myStrings:IStrings;
    myStringList:TStringList;

//mystringList erstellen und füllen

//transfer TStrings to IStrings
GetOleStrings(myStringList,myStrings);

//hier kann man jetzt myStrings.add oder mystrings.count oder mystrings.Item in der EXE und in der DLL benutzen
//es wird dadurch immer die myStringList verändert.
Und will man aus dem IStrings-Interface eine eigene Klasse kopieren gibt es "SetOleStrings".


Edit:
Ein konkretes Beispiel mit einer Stringliste eines Memos. Ich habe also ein Formular mit einem Button und ein Memo und folgendem Click-Event des Buttons:
Delphi-Quellcode:
uses StdVCL, AxCtrls;

procedure TForm1.Button1Click(Sender: TObject);
var x:IStrings;
begin
  getolestrings(memo1.lines,x);
  x.Add('Text');
end;
Die Zeile mit dem x.Add kann ich eben auch problemlos in einer DLL machen. Das x kann ich einfach übergeben.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Infamous

Registriert seit: 27. Nov 2007
16 Beiträge
 
#8

Re: Problem mit DLL / Übergabe

  Alt 10. Okt 2008, 09:35
Danke für das Beispiel, ich probiers gleich aus!
  Mit Zitat antworten Zitat
Infamous

Registriert seit: 27. Nov 2007
16 Beiträge
 
#9

Re: Problem mit DLL / Übergabe

  Alt 10. Okt 2008, 10:14
Wollte grad schon den nächsten Fehler beschreiben, aber habs gerade doch noch hingekriegt. Danke! Gut zu wissen, das mit den IStrings. Einfach und sinnvoll!
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Problem mit DLL / Übergabe

  Alt 10. Okt 2008, 10:26
Wobei mir grad auffällt, dass IStrings ja auch von Borland sind. Also anscheinend doch nicht so gut

Denn du brauchst anscheinend jetzt auf dem System, wo das Proramm läuft die registrierte Bibliothek stdvcl32.dll. Ist zwar auch nicht das Problem, aber dann kannst du auch die DLL für einen Speichermanager mitliefern.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  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 18:59 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