Heyho ihr Delphi-Experten (mehr oder weniger

),
ich scheitere hier an einer blöden DLL Datei... Also ich versuch am besten mal die Funktionsweise zu beschreiben:
Ich habe ein Programm (nennen wir es an dieser Stelle einfach mal
StringSearch.exe). So dieses Programm hat eine simple Oberfläche welche ein Edit-Feld, einen Hinzufügen-Button, sowie einen "ValueListEditor" (Wenn eventuell jemand eine bessere Idee hat, am besten mitteilen

). Gibt zwar noch andere Sache auf der Oberfläche, aber das ist nicht relevant.
So als nächstes kann man eine Adresse in die Edit-Box eingeben (z.B.
de.wikipedia.org/wiki/Delphi (Programmiersprache)) und anschließend auf Hinzufügen klicken. Dann wird die Adresse geprüft und die passende Funktion (die in einer .DLL Satei stehen!) geladen werden um den Titel abzufragen, sowie einen bestimmten String im Quelltext zwischen zwei Zeichen.
Nun das eigentliche Problem: Sobald ich die DLL-Funktion in das Hauptprogramm packe, funktioniert alles problemlos. Wenn ich jedoch die Funktionen in eine externe .DLL Datei packe und diese anschließend einbinde erhalte ich eine
Zitat: |
Zugriffsverletzung bei Adresse 008E320B in Modul 'wikipedia.dll'. Schreiben von Adresse 004B446C. |
Meldung.
So, jetzt frage ich mich natürlich was das Problem ist...? Darum hab ich einfach mal den kompletten Code der DLL eingebunden:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71:
| library WikiPedia;
uses SysUtils, Classes, idhttp, Windows, StrUtils, Controls, Forms, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient; type TArrayofstring = array of string;
{$R *.res}
function FindInString(Text, SearchFrom, SearchTo: string; FirstOnly: Boolean; var Return: TArrayofstring): Boolean; var i: Cardinal; FoundString: string; begin Result := False; SetLength(Return, 0); i := Pos(SearchFrom, Text); while i > 0 do begin Result := True; i := i + Length(SearchFrom); FoundString := Copy(Text, i, PosEx(SearchTo,Text,i) - i); [...] if FirstOnly then Break; end; end;
function GetWikipediaID(url:String):String; var p1: integer; begin p1 := Pos('i/',url); Result := Copy(url,p1+2,11); end;
function GetWikipediaTitle(id:string):string; var client : TidHttp; s : string; p1,p2 : integer; begin client := TidHttp.Create(nil); client.AllowCookies := False; client.HandleRedirects := True; client.Request.UserAgent := 'IE';
s := client.Get(id); client.Free;
p1 := Pos('<title>',s); p2 := Pos('</title>',s); Result := Copy(s,p1+7,(p2-p1)-7); end;
exports GetWikipediaID, GetWikipediaTitle, FindInString;
begin end. |
Ich hoffe dass vielleicht jemand den Fehler findet... Meine Vermutung ist eine inkompatible Komponente bei
Uses, aber ich weiß es nicht...
Danke euch
BTW: Bevor jemand fragt wieso ich es nicht in das Hauptprogramm packe ist relativ simpel, das ganze soll mit Modulen dynamisch funktionieren
Moderiert von
Narses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Do 26.05.2011 um 17:20