AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi WideString als Rückgabe in COM-Klasse

WideString als Rückgabe in COM-Klasse

Ein Thema von almisoft · begonnen am 26. Mai 2008 · letzter Beitrag vom 5. Aug 2009
Antwort Antwort
Benutzerbild von almisoft
almisoft

Registriert seit: 14. Feb 2007
Ort: Berlin
40 Beiträge
 
Delphi 7 Professional
 
#1

WideString als Rückgabe in COM-Klasse

  Alt 26. Mai 2008, 16:17
Ich habe eine kleine Funktion in einer COM-Klasse, die einen String zurückgeben soll:
function GetLastErrorMessage: WideString; stdcall; Sobald ich die Methode aber aufrufe, erscheint "Access violation at address ... in module 'RPCRT4.dll'.
Alle anderen Funktionen der COM-Klasse geben HRESULT oder WORDBOOL zurück, da gibt es keine Probleme.
Ich bin nicht so der RPC-Guru, wie kann ich über COM einen String zurückgeben? Wo liegt mein Denkfehler. Vielen Dank.
Alexander Miehlke
Alexander Miehlke
Wer Schreibfehler findet, darf sie behalten
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.753 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: WideString als Rückgabe in COM-Klasse

  Alt 26. Mai 2008, 16:28
In COM sollten Funktionen immer ein HResult zurückgeben. Strings oder so gibt man als Rückgabeparameter zurück.

Zitat aus Andreas Kosch COM-Buch:


Delphi-Quellcode:
function GetInfo(out RetVal: WideString):HResult; stdcall;
begin
  try
    RetVal := 'Der Text des COM_Objects';
    Result := S_OK;
  except
    Result := E_UNEXPECTED;
  end;
end;
Edit: Um zu diesem Ergebnis zu kommen reicht es auch, wenn Du Deine Deklaration nicht mit stdcall sondern mit safecall deklarierst.
function GetLastErrorMessage: WideString; safecall; Sherlock
Oliver
  Mit Zitat antworten Zitat
Benutzerbild von almisoft
almisoft

Registriert seit: 14. Feb 2007
Ort: Berlin
40 Beiträge
 
Delphi 7 Professional
 
#3

Re: WideString als Rückgabe in COM-Klasse

  Alt 26. Mai 2008, 16:30
supi, vielen Dank!
Alexander Miehlke
Alexander Miehlke
Wer Schreibfehler findet, darf sie behalten
  Mit Zitat antworten Zitat
Benutzerbild von almisoft
almisoft

Registriert seit: 14. Feb 2007
Ort: Berlin
40 Beiträge
 
Delphi 7 Professional
 
#4

Re: WideString als Rückgabe in COM-Klasse

  Alt 26. Mai 2008, 16:50
Hmm, ich arbeite mit dem TLB-Editor. Dort kann ich zwar einen Parameter auf [out] umstellen, das schlägt sich aber nicht im TLB-Quelltext nieder (der ja automatisch erstellt wird):
function GetLastErrorMessage(const Message: WideString): HResult; stdcall; Auch habe ich keine Möglichkeit, "safecall" anzugeben.
Alexander Miehlke
Alexander Miehlke
Wer Schreibfehler findet, darf sie behalten
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.753 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: WideString als Rückgabe in COM-Klasse

  Alt 26. Mai 2008, 17:03
Das ist seltsam.

Im TLB-Editor musst Du aber schon HResult als Rückgabewert angeben. Den String gibst Du als Out-Paramter (noch besser out und Retval) an. Der muss dann noch einen Stern (*) bekommen, damit er als Zeiger gekennzeichnet ist.

Das müsste dann eine Function mit WideString als Rückgabewert und safecall in der TLB ergeben.

Sherlock
Oliver
  Mit Zitat antworten Zitat
Jeehaa

Registriert seit: 31. Mär 2006
3 Beiträge
 
#6

Re: WideString als Rückgabe in COM-Klasse

  Alt 5. Aug 2009, 14:24
Ich weiß der Thread ist schon uralt, aber es passt einfach thematisch.

Ich hab das gleiche Problem wie zuletzte erwähnt. In dem TLB-Editor mache ich alles richtig, aber meine funktion in der Tlb.pas ist später einfahc nicht als safecall deklariert.
was kann man da falsch machen. ich verwende turbo delphi2006
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: WideString als Rückgabe in COM-Klasse

  Alt 5. Aug 2009, 15:26
Delphi benutzt safecall nur bei dualen Schnittstellen (Automatisierungsobjekt).
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Jeehaa

Registriert seit: 31. Mär 2006
3 Beiträge
 
#8

Re: WideString als Rückgabe in COM-Klasse

  Alt 5. Aug 2009, 15:31
ja, hatte ich eingestellt. hat trotzdem nicht geklappt.
jetzt habe ich dein com+ objekt erstellt, da geht es.
zuvor habe ich ein normale com-obnjekt verwendet, da ging es nicht.
komisch
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:52 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