Dll im Browser

Hi Leuts,

ich hab jetzt 'ne tolle dll, die auch schon interpretierbaren HtmlCode Rausschmeißt:
Wenn ich die dll im Browser aufrufe
(http://localhost/cgi-bin/test.dll) bekomme ich eine ganz normale WebSeite. Soweitsogut.
Die Probleme liegen jetzt bei der Parameterübergabe.
Ich hab gesehen, wie eine dll mit
…/test.dll?variable1=duda?variable2=jadu aufgerufen wurde.
wenn ich das zum testen nurmal so mache bringt mir der jeweilige wwwServer eine FM (nicht404) und interpretiert mir die Seite, die sonst funktionierte nichtmal.

Wo in dieser diesser dll muß ich was hinschreiben, damit ich die Parameter in der dll in eine Variable schmeißen kann?

Hab Visual C++ zum Programeiren.

cu desian

…/test.dll?variable1=duda?variable2=jadu aufgerufen wurde.

…/test.dll?variable1=duda&variable2=jadu aufgerufen wurde.

vermutlich liegt es daran, der Query-String wird durch ein Fragezeichen von der URL getrennt, die Parameter untereinander durch ein &.
Die Übergabeparameter findest Du dann in der Environment Variable QUERY_STRING.

Klaus

vermutlich liegt es daran, der Query-String wird durch ein
Fragezeichen von der URL getrennt, die Parameter untereinander
durch ein &.
Die Übergabeparameter findest Du dann in der Environment
Variable QUERY_STRING.

Klaus

Das war zwar ein Fehler aber daran lag es nicht.
Ich habs jetzt nochmal mit einem ‚form action…‘ probeiert.
Wenn ich da InputFelder fülle und auf meinen submit button drücke, dann ruft der die dll auf als gäbe es garkeine Parameter.

cu Desian

Ich habs jetzt nochmal mit einem ‚form action…‘ probeiert.
Wenn ich da InputFelder fülle und auf meinen submit button
drücke, dann ruft der die dll auf als gäbe es garkeine
Parameter.

yep, denn das sind zwei verschiedene Dinge.
Die in der URL kodierten Parameter sind eine GET Operation, während Dein Form eine POST Operation ist.
GET wird i.d.R. benutzt um Informationen vom Server anzufordern, während POST Operationen typischer Weise Daten auf dem Server verändern (sollen).

Klaus

yep, denn das sind zwei verschiedene Dinge.
Die in der URL kodierten Parameter sind eine GET Operation,
während Dein Form eine POST Operation ist.
GET wird i.d.R. benutzt um Informationen vom Server
anzufordern, während POST Operationen typischer Weise Daten
auf dem Server verändern (sollen).

Klaus

OK. Dann wende ich mthod=get an. Wie bekomm ich die Variablen aber nun in meine dll zum verwerten?

cu Desian

OK. Dann wende ich mthod=get an. Wie bekomm ich die Variablen
aber nun in meine dll zum verwerten?

Die Parameter stehen im Environment.
Mit der C Funktion getenv kommst Du an sie heran.
z.b.
char* querystring = get_env(„QUERY_STRING“);

Aber eigentlich möchtest Du Dich zunächst ein wenig mit CGI (Common Gateway Interface) vertraut machen, ansonsten stolperst Du nur von Problem zu Problem und am Ende hast Du alle Fettnäpfchen getroffen. :wink:

Klaus

Die Parameter stehen im Environment.
Mit der C Funktion getenv kommst Du an sie heran.
z.b.
char* querystring = get_env(„QUERY_STRING“);

Aber eigentlich möchtest Du Dich zunächst ein wenig mit CGI
(Common Gateway Interface) vertraut machen, ansonsten
stolperst Du nur von Problem zu Problem und am Ende hast Du
alle Fettnäpfchen getroffen. :wink:

Klaus

cgi ist kein Problem. Da funktioniert es einwandfrei. Das hab ich voher darin fertig gemacht. Die Routinen kenn ich dann, wenn das Funktioniert hab ich die BrowserProbleme hinter mir. *hoff*
Da waren wirklcih genug Fettnäpfchen, das ich von einem ins andere springen konnte :confused:
Ich hab von meinem Arbeitgeber nur so ne Blackbox in Form von 'n paar funktionen aus 'n paar anderen dlls bekommen, die ich nur über meine selbstprogramierte dll ansteuern soll.
Deshalb mach ich mir den Streß mit der dll. Freiwillig nicht.
Habs probiert und in die void CAtestExtension::smiley:efault(CHttpServerContext* pCtxt) geschrieben.
Funktioniert leider nicht. Welchen include brauche ich dafür?
bei get_env bekomme ich die FM ‚nicht deklarierter Berzeichner‘ und in der Hilfe zu Visual C++ steht die Funktionnicht.

cu Desian

cgi ist kein Problem. Da funktioniert es einwandfrei. Das hab
ich voher darin fertig gemacht.

Was hast du in CGI fertiggemacht? CGI ist keine Programmiersprache.

Funktioniert leider nicht. Welchen include brauche ich dafür?
bei get_env bekomme ich die FM ‚nicht deklarierter
Berzeichner‘ und in der Hilfe zu Visual C++ steht die
Funktionnicht.

Es heisst getenv() nicht get_env(), aus stdlib.h

MfG Bruno

cgi ist kein Problem. Da funktioniert es einwandfrei. Das hab
ich voher darin fertig gemacht. Die Routinen kenn ich dann,
wenn das Funktioniert hab ich die BrowserProbleme hinter mir.

CGI ist eine Spezifikation, wie der Web-Server mit Applikationen kommuniziert. Also u.a. wie Parameterübergaben stattfinden, wie sie kodiert werden und was sie bedeuten etc. Ohne diese Kenntnisse wirst Du noch eine Menge „Fettnäpfchen“ treffen.

Desweiteren stellen Bibliotheken in Visual C++ eine Reihe von Funktionen zur Verfügung, die Dir diverse Arbeiten abnehmen, zum Beispiel das Parsen und korrekte Dekodieren der Parameter.
Du solltest diese Unterstützung nicht leichtfertig über Bord werfen, auch wenn’s im ersten Anlauf nicht gleich funktioniert hat. Sie helfen Dir auch gewisse Sicherheitsrisiken zu mindern, die unerfahrene CGI Entwickler häufig einbauen.

Funktioniert leider nicht. Welchen include brauche ich dafür?
bei get_env bekomme ich die FM ‚nicht deklarierter
Berzeichner‘ und in der Hilfe zu Visual C++ steht die
Funktionnicht.

Sorry, mein Fehler. Es sollte getenv heissen, wie Bruno Dir schon mitgeteilt hat. (Danke an Bruno an dieser Stelle)

Desweiteren stellen Bibliotheken in Visual C++ eine Reihe von
Funktionen zur Verfügung, die Dir diverse Arbeiten abnehmen,
zum Beispiel das Parsen und korrekte Dekodieren der Parameter.
Du solltest diese Unterstützung nicht leichtfertig über Bord
werfen, auch wenn’s im ersten Anlauf nicht gleich funktioniert
hat. Sie helfen Dir auch gewisse Sicherheitsrisiken zu
mindern, die unerfahrene CGI Entwickler häufig einbauen.

Da werd ich aufpassen aber bis jetzt kenn ich die noch nicht, bin halt fleißig am lernen.

OK, soweit komm ich mit. Getestet hab ich envtest=getenv(„LIB“);
und ich bekomme den Pfad und kann ihn dann audgeben.
Nun zu meinem ‚Fettnäpfchen‘ (ich bin mir bewußt, blutiger Anfänger zu sein. Und für die Hilfe bis jetzt bin ich auch echt dankbar): wenn ich envtest=getenv(„QUERY_STRING“); schreibe, kommpiliert er mir die sache zwar. Wenn ich das jetzt aber im Browser ohne Variablen ausführe bekomme ich einen ‚Server-Error‘ und wenn ich es mit Variablen ausführe bekomme ich die Fehlermeldung Bad Request.

cu Desian

Was hast du in CGI fertiggemacht? CGI ist keine
Programmiersprache.

Ich meinte Perl. Bin wohl über das umgangssprachliche Wort CGI-Skript auf ‚in CGI prograieren‘ gekommen.

Es heisst getenv() nicht get_env(), aus stdlib.h

MfG Bruno

Danke, das hat mir schon ein wenig weitergeholfen.

cu Desian

Der Server Error kommt, weil ich versucht hab eine NULL in HTML auszugeben. Ich hab hier noch eine C++ Funktion gefunden

DWORD GetEnvironmentVariable(
LPCTSTR lpName, // address of environment variable name
LPTSTR lpBuffer, // address of buffer for variable value
DWORD nSize // size of buffer, in characters
);

Wie kann ich herausbekommen wie der Zweite Parameter lauten muß?
Gibt es dazu irgendwo 'ne liste welche EnvironmentVariablen Standartmäßig angelegt sind zB für den Browser und welche er benutzt?
Das war wohl auch das Problem vorhin bei mir.
Nur dieses Bad request macht er immer wenn ich versuche die dll mit *.dll?var1=www&var2=eee oder so anzugeben.

cu Desian