Einzelnen Beitrag anzeigen

MacGyver2k

Registriert seit: 21. Mär 2009
5 Beiträge
 
#1

WideString aus C++ DLL-Methode an Delphi-Host zurückgeben!?

  Alt 13. Jul 2009, 21:40
Hallo Leute,

ich habe ein Problem beim Rückgabetyp "WideString" aus einer C bzw. C++ DLL heraus.
Es besteht eine Delphi-Infrastruktur für Plugins, welche allerdings bisher ausschließlich auch mit Delphi-DLLs genutzt wurde.
Nun hab ich vor diese auch mit C/C++-DLLs zu füttern.
Geht so weit auch schonmal bei DLL-Methoden mit numerischen Rückgabe-Typen wie Integer und Bool und so weiter.
Bsp (C++):

Delphi-Quellcode:
bool DECLDIR EXTP_IsPlugIn( LPWSTR name )
{      
    return PlugIn.IsPlugIn( name );   
}
Sobal die in Delphi vorliegende Hostanwendung meine DLL lädt und die eben geschriebene Methode aufruft, geht das alles wunderbar so wie es sein soll.
Im Parameter "name" steht entsprechend die erwartete GUID als String - das konnte ich mit dem VS-Debugger prüfen.
Da ich nun hier und da schon gelesen habe, dass ein Delphi-WideString in C äquivalent mit einem LPWSTR ist, habe ich den Parametertyp auch so gewählt.
Das heißt, in diese Richtung funktioniert die Übergabe. Außerdem Kommt auch das BOOL-True in der Hostanwendung an, da die innere Methode bislang immer True zurückliefert.
Wenn ich nun aber eine Methode habe, die nach Anforderung im Delphi-Code einen WideString zurückliefern muss, so kommt absolut garnichts an - zum mindest sieht es aus wie ein leerer Sting "".
Hier mal noch eine Methode, die einen WideString zurückliefern soll (C++):

Delphi-Quellcode:
LPWSTR DECLDIR EXTP_GetPlugInDescription()
{
    return PlugIn.GetPlugInDescription();
}
Wie dem Code zu entnehmen ist, habe ich hier auch schon den Typ auf LPWSTR gesetzt. DECLDIR entsteht folgendermaßen (C++):
#define DECLDIR __declspec(dllexport) Nun stellt sich mir die Frage, wie ich wohl einen String aus C/C++ in eine für Delphi akzeptable WideString-Konforme Variante überführe.
Hier nochmal die Deklaration der entsprechenden DLL-Methode in Delphi:

GetPlugInName = function : WideString; stdcall; Ich würde mich tierisch freuen, wenn jemand hier einen Wink für mich hätte. Sonst muss ich mich nur weiterhin aufregen, dass der Entwickler dieser Pluginverwaltung unbedingt WideStrings nutzen muss, wo ich doch gelesen habe, dass man die grade in DLLs nicht unbedingt nehmen soll, sondern eher PChar, um eben solchen Problemen aus dem Weg zu gehen.

Vielen Dank an euch schonmal!!!
Grüße, MacGyver2k
  Mit Zitat antworten Zitat