Einzelnen Beitrag anzeigen

WorstNightmare

Registriert seit: 6. Okt 2008
159 Beiträge
 
RAD-Studio 2010 Arc
 
#1

Programm stürzt bei Zugriff auf DLL ab

  Alt 6. Okt 2008, 12:37
Hi,

ich habe eine DLL geschrieben, die mir einfachen Zugriff auf die Grundfunktionen von RegExpr.pas gibt, da ich noch viele andere Libraries habe, die Reguläre Ausdrücke verwenden, und diese nicht wegen RegExpr.pas 100 KB größer werden sollen.
Bei mir funktioniert die DLL auch (Vista Ultimate SP1), nur bei einem Kollegen (Windows XP SP3) stürzt das Programm, welches auf die DLL zugreift, ab.

Dies ist der Code in der DLL:
Delphi-Quellcode:
library RegExp;

{ Wichtiger Hinweis zur DLL-Speicherverwaltung: ShareMem muss sich in der
  ersten Unit der unit-Klausel der Bibliothek und des Projekts befinden (Projekt-
  Quelltext anzeigen), falls die DLL Prozeduren oder Funktionen exportiert, die
  Strings als Parameter oder Funktionsergebnisse übergeben. Das gilt für alle
  Strings, die von oder an die DLL übergeben werden -- sogar für diejenigen, die
  sich in Records und Klassen befinden. Sharemem ist die Schnittstellen-Unit zur
  Verwaltungs-DLL für gemeinsame Speicherzugriffe, BORLNDMM.DLL.
  Um die Verwendung von BORLNDMM.DLL zu vermeiden, können Sie String-
  Informationen als PChar- oder ShortString-Parameter übergeben. }


uses
  RegExpr;

{$R *.res}

function RegEx(Mask, Source: PChar): PChar; stdcall;
var
  RE: TRegExpr;
begin
  RE := TRegExpr.Create;
  RE.Expression := Mask;
  try
    if RE.Exec(Source) then
      Result := PChar(RE.Match[0])
    else
      Result := 'kein Treffer';
  finally
    RE.Free;
  end;
end;

exports
  RegEx;

begin
end.
Und so sieht die Zugriffs-Unit aus:
Delphi-Quellcode:
unit RegExp;

interface

const
  LIB = 'Plugins\RegExp.dll';
  NOT_MATCHED = 'kein Treffer';

function RegExProc(Mask, Source: PChar): PChar; stdcall; external LIB name 'RegEx';
function RegEx(Mask, Source: string): string;

implementation

function RegEx(Mask, Source: string): string;
begin
  Result := RegExProc(PChar(Mask), PChar(Source));
end;

end.
Ein Aufruf sieht z.B. so aus:
Delphi-Quellcode:
var
  s: string;
begin
  s := RegEx('\d+', 'asd123dsa');
end;
Beides wurde mit Delphi 2009 kompiliert.
Liegt der Fehler in meinem Code, oder kann es auch an etwas anderem liegen?
  Mit Zitat antworten Zitat