2009-07-23 10 views
1

Für ein Projekt, an dem ich gerade arbeite, möchte ich WordNet verwenden, um eine linguistische Klassifizierung von Benutzereingaben vorzunehmen, und ich möchte die Prolog-Version der Datenbank verwenden.C# und Prolog integrieren

Ich habe versucht P#, die einigermaßen gut funktioniert, aber scheint nicht in der Lage, die schiere Größe der WordNet-Datenbanken zu behandeln. Es kann die kleinste der Dateien kompilieren, die ich verwenden möchte (218 kB), aber wenn ich versuche, die zwei größeren Dateien zu kompilieren (2,3 bzw. 7,3 MB), scheitert es nach etwa einer halben Stunde Arbeit und Windows öffnet die " Es ist ein Fehler aufgetreten. Senden Sie den Bericht an Microsoft? " Dialog.

Ich habe auch versucht Prolog.Net, die gerade scheint nicht sehr gut zu funktionieren.

Schließlich habe ich versucht, die C# bindings für SWI-Prolog, aber kann sie nicht richtig funktionieren. Wenn ich versuche, den Beispielcode auszuführen, scheitert es an dem PLEngine.Initialise() Schritt, der behauptet, dass etwas, das es versucht (eine DLL, die ich übernehme) zu laden, eine ungültige Win32-Anwendung (eine BadImageFormatException) ist.

Hat jemand irgendwelche Vorschläge für andere Möglichkeiten, C# und Prolog zu integrieren, oder einige Vorschläge, um die Lösungen zu bekommen, die ich bereits versucht habe zu arbeiten? Betriebssystem ist Windows Server 2008 (64 Bit), SWI Prolog ist Version 5.7.11.

+0

Vom Fehler ich vermute, dass Sie vielleicht einen 32-64bit Konflikt haben, versuchen Sie, alles als ein 32bit Zeug vielleicht zu kompilieren und zu sehen, was passiert. –

+0

Ähnliche Fragen, die mehr Alternativen auflistet: http://StackOverflow.com/Questions/181855/integrating-Prolog-with-C – ThomasH

+0

Übrigens, Martins Antwort gegeben, haben Sie versucht, P # mit x64 zu kompilieren und sehen, ob das geholfen hat? – Enigmativity

Antwort

1

Vielleicht haben Sie Probleme mit 32-Bit-SWI-Prolog auf 64-Bit-Windows. Wenn Ihr Plattform-Ziel ist, kann eine CPU die Ursache für Ihre Probleme sein. Sie können dies beheben, indem Sie die Eigenschaftenseiten für Ihr C# -Projekt öffnen. Wählen Sie die Build Registerkarte und ändern Sie die Platform Ziel zu x86.

Wenn Sie derzeit verwenden Alle CPU Ihre Anwendung wird in 64-Bit auf 64-Bit-Windows ausgeführt. Der Versuch, eine 32-Bit-DLL zu laden, wird kläglich scheitern.

+0

Danke! Der Wechsel zu x86 hat das Problem behoben (sollte ich selbst ausprobieren). Der Teil, der Prolog verwendet, ist nur ein Teil eines größeren Projekts. Wird das Ziel dieses Projekts auf x86 geändert, bedeutet das, dass alles auf x86 abzielen muss, oder rettet mich .Net auf magische Weise davon? – arnsholt

+0

Wenn Sie x86 anvisieren, wird Ihre gesamte Anwendung in 32 Bit ausgeführt. Sie müssen dies tun, da SWI-Prolog 32 Bit ist. Ich wäre jedoch nicht besorgt. Sie verwenden wahrscheinlich Visual Studio als Ihr Entwicklungstool und das läuft auch in 32 Bit. Wenn Ihre Anwendung mehrere Prozesse umfasst, die auf irgendeine Weise kommunizieren, ist es natürlich möglich, dass einige Prozesse in 32 Bit und einige in 64 Bit laufen. –