Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Globale Variable in DLL (?) (https://www.delphipraxis.net/87189-globale-variable-dll.html)

Mao 24. Feb 2007 18:40


Globale Variable in DLL (?)
 
Hi DP'ler. :hi:

Wieder einmal hoffe ich, in der richtigen Kategorie gelandet zu sein.
Es geht um folgendes Problem: Ich möchte gerne 256 XML-Dokumente gleichzeitig öffnen (bzw. erstmal erstellen) und das in einer DLL. Ein einzigstes Array nimmt die 256 Objekte auf. Nur hab ich damit irgendwie ein Problem. In der DLL gibt der Code -1 zurück, verwende ich ihn normal in einem Programm wird alles problemlos ausgeführt. :?
Es geht um folgenden DLL-Code (gekürzt):
Delphi-Quellcode:
{...}

uses
  ShareMem, SysUtils, Classes, MSXML2_TLB;

{$R *.res}

{...}

var
  DB: Array[0..255] of IXMLDOMDocument2;

{...}
function DBInit: Integer;
var
  i: Integer;
begin
  Result:=0;
  for i:=0 to 255 do begin
    try
      DB[i]:=CoDOMDocument40.Create;
      DB[i].setProperty('NewParser', True);
    except
      Result:=-1;
      Exit;
    end;
  end;
end;

{...}
In der Anwendung, die verwendet wird, wird der Prototyp von mir folgendermaßen deklariert:
Delphi-Quellcode:
function DBInit: Integer; external 'dblib.dll';
Hat irgendjemand eine Ahnung, was daran nicht geht bzw. an was das liegt?

Danke schonmal für's Lesen,
Mao :wink:

/edit: Code gaaaanz geringfügig editiert (Rückgabewert der Funktion bei Fehler).

DGL-luke 24. Feb 2007 18:44

Re: Globale Variable in DLL (?)
 
Ich seh hier nirgends was, wie das Result überhaupt auf -1 kommen könnte :shock:

Sach mal... bist du dir sicher, dass DOMDocument40 das IXMLDOMDocument2 implementiert?

Mao 24. Feb 2007 19:23

Re: Globale Variable in DLL (?)
 
Oh, ich hatte den Rückgabewert der Funktion bei einem Fehler auf die Laufvariable i gesetzt - um zu sehen, wieviele Objekte er wirklich erstellt. Nun, es ist kein einzigstes. :pale: (Code oben jetzt berichtigt...)

Der Unterschied des Variablentyps mit der Klasse des Konstruktors sollte eigentlich funktionieren - ich hab mich hier mal ganz an das XML-Tutorial aus der DP gehalten. :angel:

Bernhard Geyer 24. Feb 2007 21:53

Re: Globale Variable in DLL (?)
 
Ich tipp mal drauf das du in der DLL kein CoInitialize aufrufst. In einer "normalen" Exe-Anwendung wird dies über Application.Initialize automatisch aufgerufen.
Weiter Hilfe wenn du die Forensuche bemühst.

Mao 26. Feb 2007 14:26

Re: Globale Variable in DLL (?)
 
Hi. :hi:

Das war tatsächlich das Problem! :-D

Jetzt läuft alles wunderbar, danke allen, die das gelesen und noch mehr denen, die geantwortet haben. :zwinker:

Greets,
Mao


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 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