| | | | |
| | |
| Neuer Benutzer Registriert seit: 08.04.2008
Beiträge: 8
![]() | Hallo, ich bin ganz neu hier und das, weil ich bei einem Problem einfach nicht weiter weiß. Vielleicht kann mir jemand den entscheidenden Tipp geben zur Lösung des Problems. Lange Rede, kurzer Sinn, es geht um die Erstellung einer PHP Extension die eine andere DLL (keine PHP Bibliothek) einbindet und Funktionen aus dieser verwenden soll. Das ganze programmiere ich in Visual Studio C++ 2005 (Express Edition). Eine simple Extension, die anhand von Parametern eine Berechnung macht oder einen Paramter als Text ausgibt, habe ich geschrieben (unter Zuhilfenahme dieses Tutorials) und sie funktioniert auch in meiner PHP Umgebung (Windows Server 2003, IIS, PHP, MySQL). Gehe ich nun jedoch dazu über, eine externe Bibliothek einzubinden, kompiliere das ganze (ohne Fehler) und lade diese Extension in PHP, so funktionieren weder die vormals lauffähigen Funktionen noch die neuen, die auf die externe DLL zugreifen. Genauer gesagt wird die Extension nicht mal von PHP geladen, denn sie taucht in der php.ini nicht mehr auf. Die externe DLL ist eine Windows DLL des Little Color Management. Im Anschluss habe ich mal meinen Code der Extension, woran vielleicht schon erkannt werden kann, was mein Fehler ist. PHP-Code: Wenn diese nun kompilierte Extension jedoch eingebunden werden soll, wird sie das nicht. In der Windows Ereignisanzeige konnte ich keinen Eintrag finden, dass die DLL beim Starten des IIS nicht korrekt geladen werden konnte, daher weiß ich leider auch nicht weiter, wie ich herausfinden kann, woran es liegt. Die lcms DLL habe ich sowohl im Linker des Projektes mit der zugehörigen .lib angegeben, als auch wie zu sehen, die Header Datei in die Quelltextdatei eingebunden. Bis denne, Han Solo |
| |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | |
| Erfahrener Benutzer Registriert seit: 05.09.2007
Beiträge: 5.044
![]() | Bau mal in die Funktion einen DebugBreak() ein und lass Dir einen Debug-Build erstellen. Dann kannst Du Dich mit dem Debugger im Visual Studio ein bisschen umsehen. DebugBreak Function (Windows) In den Compiler-Flags von beiden DLLs solltest Du jeweils eines der folgenden Flags finden: /MD, /MT, /LD (beim Debug-Build hängt da immer noch ein kleines d dran). Welches dieser drei Flags ist bei den Projekten gesetzt? |
| |
| | |
| Neuer Benutzer Registriert seit: 08.04.2008
Beiträge: 8
![]() | Das wird ein Produktivsystem, wo ich nicht allzuviel schrauben will. Bin kein Systemadministrator, muss aber in dem Fall sehr viel von dessen Arbeit übernehmen. Daher sind mir Eingriffe, die ich nicht 100%ig sicher machen kann, und wo ich nicht gewähren kann, dass damit keine Sicherheitslücken entstehen, nicht sehr willkommen. Das schränkt ungemein ein, ich weiß, doch leider bleibt mir nichts anderes übrig. Die andere DLL hab ich selber kompiliert. Damit war es mir möglich, sie überhaupt fehlerfrei zu laden und es wurde die Extension von PHP erkannt. Bei der DLL handelt es sich um das Little Color Management. Als Source nutzte ich diesen, ludt das Visual Studio VC Projekt und kompilierte nur das lcms Projekt. Bekam damit eine lcmsd.lib und eine lcmsd.dll. Alles entsprechend in mein PHP Extension Projekt kopiert, im Linker eingebunden (die .lib), die .h includiert und hab damit Zugriff auf die Methoden der DLL. Was mir nun jedoch auch auffällt ist, dass auch bei auskommentierten Codezeilen die Extension den Zugriffsfehler erzeugt. Ich habe die auskommentierten Codezeilen zum erzeugen von Variablen eines Typs der lcms DLL jetzt nochmal komplett rausgeworfen und die Methode warf keinen Error beim simplen php_printf() zum Anzeigen des übergebenen Parameters. Danach erweiterte ich die Methode auf 3 Parameter PHP-Code: Irgendwie will mir das nicht in den Kopf gehen, was das Problem daran ist und warum beim ändern der Parameteranzahl schon einen Zugriffsfehler bekomme. Auch bei den anderen Methoden, die mit einem Parameter funtkionieren, tritt der Zugriffsfehler auf, wenn ich die Parameteranzahl erhöhe und entprechend viele Parameter übergebe. Werden zu wenig Parameter übergeben, gibt PHP die Fehlermeldung Warning: hello_greetme() expects exactly 2 parameters, 1 given in C:\Inetpub\wwwroot\testext.php on line 9 aus. Bei zuvielen Parametern wie gesagt die Access Violation. Mache ich einen Fehler bei der Definition der Anzahl der Parameter oder beim instanzieren der Variablen des eingebundenen DLL? Bis denne, Han Solo |
| |
| | |
| Neuer Benutzer Registriert seit: 08.04.2008
Beiträge: 8
![]() | Ich habe nun auf dem Entwicklungssystem den IIS inklusive PHP eingerichtet und die Extension eingebunden. Es tritt der gleiche Fehler auf. Sowie ich mehr als einen Parameter an die Funktionen übergebe (die z.B. 2 erwartet) wird die Access Violation geworfen. Also wäre an dieser Stelle ein Debuggen der PHP Extension sinnvoll? Nur wie mache ich das, wenn die im ./ext Verzeichnis von PHP liegt. Diese PHP Extension Programmierung ist für mich totales Neuland und deswegen mögen manche Fragen komisch klingen. Bis denne, Han Solo |
| |
| | ||
| Erfahrener Benutzer Registriert seit: 05.09.2007
Beiträge: 5.044
![]() | Zitat:
Sobald das Programm auf die DebugBreak Anweisung trifft, wird eine Ausnahme erzeugt und Windows fragt nach, ob und womit das Programm debugged werden soll (es sei denn ein entsprechender handler wurde eingebaut) | |
| |
| Themen-Optionen | |
| Thema bewerten | |
|
|
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Probleme mit mbstring extension unter Debian | HStev | Server, Hosting und Workstations | 3 | 30.08.2006 20:55 |
| php5 soap extension, soap attachment | zcmaster | PHP-Fortgeschrittene | 0 | 07.08.2006 16:09 |
| Problem mit der Einbindung einer Extension | schiff | PHP Tipps 2006 | 1 | 14.06.2006 19:59 |
| PHP IMAP Extension | PHP Tipps 2007 | 8 | 30.12.2005 15:22 | |
| PHP extension und PHPAdmin | PHP Tipps 2005 | 7 | 15.07.2005 14:26 | |
| [Erledigt] Bluetooth extension | PHP-Fortgeschrittene | 2 | 05.07.2005 21:29 | |
| Installieren der Extension php_iconv.dll | MerlinderZauberer | PHP Tipps 2005 | 1 | 16.04.2005 03:13 |
| PHP5 Extension | PHP Tipps 2005 | 1 | 11.01.2005 09:03 | |
| [Erledigt] SOAP/Client.php: PHP Fatal error: Method SOAP_Client::__call | PHP-Fortgeschrittene | 6 | 25.11.2004 09:48 | |
| Besucher kamen über folgende Suchanfragen bei Google auf diese Seite |
| php dll, php dll erstellen, php dll aufrufen, dll php, php dll laden, dll in php, php und dll, php function extension c, php dll zugriff, dll mit php, dll für php schreiben, php com dll, php windows dll, php externe dll, php extensions selber schreiben, mit php auf dll, dll für php, php dll registrieren, http://www.php.de/php-tipps-2008/838-erstellung-einer-extension-mit-einbindung-externer-dll.html, php5.2 externe extensions |