kann eine in BCB programmierte DLL von einem PHP-Programm genutzt werden?
-
Vielen herzlichen Dank, Jansen, für den Hinweis.
Ich werde es einfach probieren, wie das überhaupt geht.
xy
-
wenn du etwas in php hinkompilieren willst, musst du dich genauer mit php beschäftigen..
es gibt eine windows-php gruppe, habe die adresse grad nicht..
hier aber ein buch, wo du ein beispiel zur erweiterung von php findest: in php ist die erweiterung angelegt, aber sehr genau festgelegt, wie:
http://www.php-center.de/beitraege/detail.php?a_id=133
ein beispiel aus dem buch:
/* include standard header */ #include "php/php.h" /* declaration of functions to be exported */ ZEND_FUNCTION(first_module); /* compiled function list so Zend knows what's in this module */ zend_function_entry firstmod_functions[] = { ZEND_FE(first_module, NULL) {NULL, NULL, NULL} }; /* compiled module information */ zend_module_entry firstmod_module_entry = { "First Module", firstmod_functions, NULL, NULL, NULL, NULL, NULL, // STANDARD_MODULE_PROPERTIES }; /* implement standard "stub" routine to introduce ourselves to Zend */ #if COMPILE_DL DLEXPORT zend_module_entry *get_module(void) { return(&firstmod_module_entry); } #endif /* implement function that is meant to be made available to PHP */ ZEND_FUNCTION(first_module) { zval **parameter; if((ZEND_NUM_ARGS() != 1) || (zend_get_parameters_ex(1, ¶meter) != SUCCESS)) { WRONG_PARAM_COUNT; } convert_to_long_ex(parameter); RETURN_LONG((*parameter)->value.lval); }
#ifndef _FIRST_MODULE_H #define _FIRST_MODULE_H extern zend_module_entry firstmod_module_entry; #define phpext_first_module_ptr &firstmod_module_entry #endif /* _FIRST_MODULE_H */
und dann die php dazu:
<?php dl("first.dll"); $param = 2; //$return = first_module($param); print("We sent \"$param\" and got \"$return\""); ?>
man sieht, ist schon etwas älter, da dl deprecated ist.
na ja... ist ein aufwand.
ich würde nicht php erweitern wollen, sondern einfach eine binary herstellen, die ich auf den server drauflege, und über cgi anspreche...
aber nicht mit dem (windows)borland, da die meisten server unter linux laufen.
wie man darüberhinaus noch den apache aufmotzt, hat andreasW im faq beschrieben.
so long erstmal
-
Dankeschön, elise. Du scheinst Dich in diesem Gebiet gut auszukennen.
Eigentlich kenne ich mich in PHP noch gar nicht aus. ICh wollte erst einmal die DLL in BCB programmieren und danach schauen, wie ich sie in einem PHP-Programm einbinden kann.Was mich jetzt aber an erster Stelle interessiert, ist, ob es prinzipiell möglich ist, die aus dem unten stehenden Code (als Beispiel mal) erstellten DLL von einem PHP-Programm ohne weiteres benutzt werden kann.
#include <vcl.h> #pragma hdrstop //--------------------------------------------------------------------------- extern "C" __declspec(dllexport) int Addieren(int, int); //--------------------------------------------------------------------------- int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) { return 1; } //--------------------------------------------------------------------------- int Addieren(int Zahl1, int Zahl2) { return Zahl1+Zahl2; }
Könntest Du es mir bitte sagen? ICh kann leider nicht testen.
Danke sehr
xy
-
das funktioniert so natürlcih nicht.
Das Beispiel von elise ist recht eindrucksvoll (danke elise). Das solltest du nachvollziehen, damit es funktioniert.Lad nen Inidaner runter und schreib ne dll, die ähnlich aufgebaut ist wie die, die elise gepostet hat. Studiere die php.h, um weitere nformationen zu saugen. Schau dich in einschlägigen PHP-Foren um, um wietere hintergrundinformationen zu ziehen.
Frag elise, ob sie dir die entsprechenden Beschreibungen des Buches einscannt
, oder kauf dir das Buch.
-
vielleicht sagst du einfach, worauf du hinaus willst..
ich glaube nämlich garnicht, daß du an php weiterarbeiten willst, sondern ich vermute, du willst einfach eine binary auf dem server durch php ansprechen.das würde ich - wie oben gesagt - nicht über "irgendwie dll" machen, sondern easy über ein programm, daß ich als binary in einen cgi ordner ablege, die rechte dafür müssen geklärt werden, und dann über php mit diesem binary kommuniziere.
neue module für php selber entwickeln ... na ja, dafür würde ich linux bevorzugen, und auf keinen fall mit dem borland
*sorry, ohne diskriminierend sein zu wollen...*
-
AndreasW schrieb:
das funktioniert so natürlcih nicht.
Ok, das wollte ich erstmal wissen. Vielen Dank, AndreasW.
elise schrieb:
ich glaube nämlich garnicht, daß du an php weiterarbeiten willst, sondern ich vermute, du willst einfach eine binary auf dem server durch php ansprechen.
Doch, aber nicht ich sondern derjenige, an den ich die DLL weitergeben werde.
elise schrieb:
vielleicht sagst du einfach, worauf du hinaus willst..
Ok, mache ich. Ich hatte als Teilprojekt ein Programm in BCB programmiert, das ein Ergebnis liefert. Dieses Ergebnis wird von einem anderen (nicht von mir) in PHP geschriebenen Programm weiterbearbeitet. Nun soll ich aus meinem Programm eine DLL machen (Wenn der Aufwand nicht so groß ist!), damit diese dann vom PHP-Programm einfach genutzt wird. Deshalb wollte ich erstmal wissen, ob es überhaupt so geht, wie ich in meinem Beispiel gemacht habe.
Jetzt weiß ich aber, daß es so nicht geht, und daß es aufwändiger ist, als ich dachte. Mal sehen, was ich jetzt machen werde. Falls ich aber damit weiter mache und zu einem Ergebnis komme, dann poste ich hier eine Zusammenfassung, wie man so etwas überhaupt macht.
Danke für die Hilfe und schönen Tag
xy
-
trotzdem nochmal die frage:
warum nicht als cgi, und dann auf den server legen? warum ins php mir reinnehmen?
ok, die entwickler von php haben eine schnittstelle offengelegt, an die man sich andocken kann. aber es gibt soviele andere möglichkeiten, eine kommunikation zwischen binaries und php herzustellen.
und da du unter windows entwickelst, verstehe ich auch nicht, wie es portierbar werden soll richtung linux. denn php läuft zu größten teilen im real life unter linux, nur einige entwickler haben zuhause ein paar windowsphps zum eben mal abends drüberschaun. aber wir wissen doch alle, daß die sicherheitsstufe einen windows apachen mit nem windows-php nur schwer für webansprüche anzupassen ist.aber ich würde mich über eine genaue darstellung, wie du es dann machst, sehr freuen
-
ps:
noch bei ein wenig suche gefunden:
http://www.php-resource.de/manual.php?p=zend.builddu brauchst dir das buch also nicht holen... hier steht viel beschrieben.
viel glück
-
elise schrieb:
trotzdem nochmal die frage:
warum nicht als cgi, und dann auf den server legen? warum ins php mir reinnehmen?
Ich weiß es (noch) nicht, weil ich davon "keine" Ahnung habe. Ich habe mich damit bisher noch nie richtig beschäftigt. (Vielleicht ist es jetzt eine gute Gelegenheit dazu)
Es ist so, daß beide Programme (meins in BCB und nichtmeins in PHP) schon im Einsatz sind. Es ist nur so, daß beide Programme hintereinander ausgeführt werden müssen, meins zuerst, um das Ergebnis zu liefern, was das PHP-Programm dann weiter bearbeitet. Nun kam der Vorschlag, daß daraus ein einziges Programm in PHP werden soll, und so kam die Idee mit der DLL.elise schrieb:
aber ich würde mich über eine genaue darstellung, wie du es dann machst, sehr freuen
Falls ich damit weiter mache (Chefentscheidung), dann werde ich das Ergebnis auf jeden Fall hier posten. (Das Mindeste, was ich tun kann, um mich zu revanchieren)
Aber herzlichen Dank erst einmal für Deine Hilfe und Tipps. Sehr lieb von Dir.
xy
-
und als letztes:
sehe ich ein fertiges framework, zwar delphi, aber dann gibts das für borland builder vielleicht auch
PHP4Delphi Framework - Writing PHP extensions with Borland Delphi You all know what is PHP. After all, you are reading this magazine. Every new version of PHP brings even more new functions then the previous one. You can use them to do all sorts of things when building a web site. It is also possible to extend PHP itself by adding your own extension modules which can have a lot of functions you have created to suit your needs. You can use C++ and the Zend API. A few months ago a Belgium programmer Serhiy Perevoznyk created a component for Borland Delphi "PHP4Delphi Framework". Now you can easily create your own extensions by using the mechanism provided or stick to the Zend API approach adapted to the Delphi environment.
http://www.php-mag.net/itr/ausgaben/psecom,id,177,nodeid,112.html
http://members.chello.be/ws36637/php4delphi.htmlobwohl mich eine direkte zendlösung mehr interessieren würde
-
Peinlich, peinlich...
Das andere Programm, das meine DLL nutzen soll, ist nicht mit PHP geschrieben, sondern mit PERL. ICh weiß nicht, wie ich auf PHP kam. *Ich schäme mich wirklich*
Daher entschuldige ich mich vielmals.Nun muß ich neu anfangen, und traue mich gar nicht mehr, eine Frage zu stellen.
Allen Helfern, insbesondere Dir elise, nochmals danke und Entschuldigung!
MfG
xy
-
Dann wäre vieleicht swig ganz interessant:
http://www.swig.org/
-
case schrieb:
Dann wäre vieleicht swig ganz interessant:
http://www.swig.org/Dankeschön, case.
Es wäre mir in diesem Fall aber lieber, wenn ich es wüßte, wie man eine (BCB) DLL (anhand des Beispiels oben) bzw. die Schnittstelle nach Außen (PERL) programmiert.ICh glaube, ich muß aber ein neues Thread eröffnen, weil dies jetzt mit PHP nichts mehr zu tun hat, oder? Frage an die Mods.
MfG
xy
-
Ich denke, du solltest erstmal in "Webzeugs" oder in "Rund um" klären, ob und wie eine DLL aus Perl heraus benutzt werden kann.
Wenn das geregelt ist, und wenn es bei der konkreten Umsetzung Probleme geben sollte, die evtl. auf Besonderheiten des BCB zurückzuführen sind, dann wäre ggf. ein neuer Thread hier angebracht.