Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi IStrings richtig verarbeiten(OLE/COM Server) (https://www.delphipraxis.net/181140-istrings-richtig-verarbeiten-ole-com-server.html)

TTF 18. Jul 2014 16:36


IStrings richtig verarbeiten(OLE/COM Server)
 
Liste der Anhänge anzeigen (Anzahl: 5)
Ich habe einen OLE Automation Server in Delphi geschrieben der soweit auch ganz gut funktioniert.
Der Server sieht so aus:
Anhang 41477

Der Client so:

Anhang 41478

SendText funktioniert ausgezeichnet. Bei GetText liegt das Problem. Ich bekomme folgende Fehlermeldung:

Anhang 41479

Beim Server hab ich folgenden Code, um dem Client den Text des Server zu schicken:

Delphi-Quellcode:
function TMyCom2.Get_Text() : IStrings;
begin
   GetOleStrings(unit1.Form1.Memo1.Lines, Result);
end;
Beim Client diesen, um das 'Geschickte' zu empfangen:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  aStrings : IStrings;
begin
  aStrings.Add(Server.Get_Text);
  SetOleStrings(Memo1.Lines, aStrings);
end;
Ich wäre sehr froh, wenn jemand sich den Code oder sogar die beiden Projekte(Anhang) ansehen könnte und mir sagen könnte, wo der Fehler liegt.

Danke schonmal im Voraus:-D

mkinzler 18. Jul 2014 16:42

AW: IStrings richtig verarbeiten(OLE/COM Server)
 
Wo kommt diese Fehlermeldung, am Server oder am Client? Passiert etwas bei der Gegenstelle?

Sir Rufo 18. Jul 2014 17:10

AW: IStrings richtig verarbeiten(OLE/COM Server)
 
Also das hier
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  aStrings : IStrings;
begin
  aStrings.Add(Server.Get_Text);
  ...
end;
stinkt doch irgendwie.
Delphi-Quellcode:
aStrings
zeigt irgendwo im Speicher hin. Das ist auf jeden Fall falsch.

Mal so ein Schuss ins Blaue (habe mir nicht den Anhang angesehen)
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  aStrings : IStrings;
begin
  aStrings := Server.Get_Text;
  SetOleStrings(Memo1.Lines, aStrings);
end;

TTF 18. Jul 2014 17:16

AW: IStrings richtig verarbeiten(OLE/COM Server)
 
@mkinzler: Ehrlich gesagt weiss ich es nicht da ja beide Anwendungen gleichzeitig laufen.

@Sir Rufo: Hmm ich denke auch, dass der Fehler in diesen beiden Zeilen liegt, aber ich habe keine Ahnung wie ich es besser machen könnte. Deshalb frag ich ja...:?

Sir Rufo 18. Jul 2014 17:18

AW: IStrings richtig verarbeiten(OLE/COM Server)
 
Zitat:

Zitat von TTF (Beitrag 1265951)
@mkinzler: Ehrlich gesagt weiss ich es nicht da ja beide Anwendungen gleichzeitig laufen.

@Sir Rufo: Hmm ich denke auch, dass der Fehler in diesen beiden Zeilen liegt, aber ich habe keine Ahnung wie ich es besser machen könnte. Deshalb frag ich ja...:?

Wie ist denn das
Delphi-Quellcode:
Server.Get_Text
definiert?
(Sitze am Tablet und möchte jetzt nicht erst den Rechner starten, ist eh schon warm genug)

So?
Delphi-Quellcode:
function Get_Text : IStrings;
.

Ok, habe es gerade gesehen :) - Lösung siehe mein vorheriger Beitrag

TTF 18. Jul 2014 17:22

AW: IStrings richtig verarbeiten(OLE/COM Server)
 
@Sir Rufo: Genau das habe ich als Erstes gemacht. Aber Delphi erkennt Get_Text nicht als IString sondern als OleVariant, also hab ich versucht das irgendwie umzumappen..

@Sir Rufo 2.: Ich bin am Smartphone:lol:(Hab den Code nicht vor mir)...nachher start ich dann den Rechner

TTF 18. Jul 2014 17:56

AW: IStrings richtig verarbeiten(OLE/COM Server)
 
nichts(Versehen)

himitsu 18. Jul 2014 19:59

AW: IStrings richtig verarbeiten(OLE/COM Server)
 
Ein OleObject ist wie ein aufgemotzter Variant und du kannst direkt auf Methoden und Property des enthaltenen Interfaces zugreifen.
(nur die Codevervollständigung weiß natürlich noch nicht, was da später mal drin sein wird)


Wenn das IStrings.Add dieses Interface als Parameter versteht, dann darfst du das gerne "ummappen",
aber in das aStrings solltest du vorher auch eine Instanz rein tun, von welcher du diese Methode dann aufrufen kannst. :roll:

Oder du weist einfach dieses Result (OleVariant) der Interfacevariable zu, bzw. castest den OleVariant mit AS (wobei ich jetzt nicht genau weiß ob das wirklich geht).

TTF 18. Jul 2014 22:08

AW: IStrings richtig verarbeiten(OLE/COM Server)
 
Zitat:

Zitat von himitsu (Beitrag 1265968)
Wenn das IStrings.Add dieses Interface als Parameter versteht, dann darfst du das gerne "ummappen",
aber in das aStrings solltest du vorher auch eine Instanz rein tun, von welcher du diese Methode dann aufrufen kannst. :roll:

Den zweiten Teil(Instanz reintun?) verstehe ich nicht ganz. Kannst du mir bitte ein Codeschnipsel posten? Vielleicht versteh ich dann besser was du meinst

TTF 21. Jul 2014 08:41

AW: IStrings richtig verarbeiten(OLE/COM Server)
 
Ich hab das Ganze jetzt als BStr also WideString versucht. Das Resultat ist das gleiche:(, nur eine andere Fehlermeldung und etwas weniger Code:D

Fehlermeldung:

Unzulässige Parameteranzahl

Code:

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
  Memo1.Lines.Add(Server.Get_Text());
end;
Ich frage mich einfach.. Ich schaff es nicht eine einzige Zeile ohne Fehler zu schreiben:lol:
Wäre echt froh, wenn jemand mir dabei helfen könnte.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:36 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz