Hallo Zusammen,
zuerst einmal bin ich mir nicht sicher ob das Thema im richtigen Forum platziert ist...
Mein Problem ist folgendes:
ein idhttp-client schickt einen Stream an den Server. Dieser zeigt ihn auch bei Aufruf des
Arequestinfo.PostStream
an.
Nur muss ich diesen aber noch in meine
DLL bekommen, da von dort die Weiterverarbeitung läuft.
Meine Frage konkret: wie übergebe ich einen Stream an eine
DLL?
(In dem gesendeten Stream ist ein
xml-Dokument verpackt.)
Wenn der Client ein Get-Request macht hole ich so die Daten aus der
DLL:
Delphi-Quellcode:
procedure TFServer.IdHTTPServer1CommandGet(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var s: TMemorystream;
str : TStringstream;
df:
string;
p: integer;
Handle: THandle;
Anzeigen: TAnzeigen;
begin
s:= TMemorystream.Create;
str:= TStringStream.Create;
p := pos('
/',ARequestInfo.URI);
df := rightstr(ARequestInfo.URI, length(ARequestInfo.URI)-p);
try
handle := Loadlibrary(pchar('
PServerDLL.dll'));
if handle <> 0
then
begin
//*******************************GET********************************
if ARequestInfo.Command ='
GET'
then
begin
@Anzeigen := GetProcAddress(
Handle,PCHAR('
DataOutputStr'));
if @Anzeigen <>
nil then s := Anzeigen(
df,xm);
//<<-- funktioniert, liefert ein Stream an den Client zurück mit Inhalt: xml-File welches angefordert wurde
end
//*******************************POST**********************************
else if ARequestInfo.Command ='
POST'
then
begin
showmessage('
Post1');
//str.LoadFromStream(Arequestinfo.PostStream);
//showmessage('pServer: '+str.DataString);
@Anzeigen := GetProcAddress(
Handle,PCHAR('
DataInputStr'));
//<<-- 'DataInputStr' ist die procedure die den Stream in der DLL aufnehmen soll
if @Anzeigen <>
nil then s := Anzeigen(
df,xm);
end
end;
AResponseInfo.ContentStream := s;
//<<--- Zurück an Server
Hoffe jemand weiss zu helfen..
Update:
(function in der
DLL ist:
function DataInputStr(c: string; x: IXMLDocument): TMemoryStream;
Also in die
DLL komme ich, nur wenn ich den Stream-Inhalt abrufe, ist er leer.
Wenn ich das x des
Xml-Dokumentes abfrage ist da nur das Dummy-
xml drin und nicht das welches der client gesendet hat.